Xpath是正确的仍然没有这样的元素:无法定位元素

Xpath是正确的仍然没有这样的元素:无法定位元素

问题描述:

我的Xpath是正确的&没有iFrame和我可以在Chrome控制台中定位元素,但我的程序仍然失败。我也用过明确的等待。Xpath是正确的仍然没有这样的元素:无法定位元素

网站http://newtours.demoaut.com/ 我想找到登录页面并发送登录ID。

错误消息:

通过:的OpenURL FAILED:loginToTours ** org.openqa.selenium.NoSuchElementException **:**没有这样的元件:无法找到元素:{ “方法”:” xpath“,”selector“:”//输入[@ name ='userName']“} ** ***元素信息:{Using = xpath,value = // input [@ name ='userName']}
package SeleniumPracticePackage; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
    import org.openqa.selenium.chrome.ChromeOptions; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait ; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.List; 
import java.util.Properties; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

public class CallUrl { 

WebDriver driver; 
Properties prop;  

@BeforeTest 
public void openBrowser() throws IOException 
{ 

// driver = new ChromeDriver(); 

ChromeOptions options = new ChromeOptions(); 
options.addArguments("chrome.switches","--disable-extensions"); 
System.setProperty("webdriver.chrome.driver","C:\\Users\\Ashish\\Documents\\Selenium\\drivers\\chromedriver_win32\\chromedriver.exe"); 
//System.setProperty("webdriver.chrome.driver",(System.getProperty("user.dir") + "//src//test//resources//chromedriver_new.exe")); 
driver = new ChromeDriver(options);  
} 
@Test 
public void openURL() throws IOException 
{ 
//call URL from properties file 
prop = new Properties(); 
FileInputStream urlFile = new FileInputStream("C:\\Users\\Ashish\\Documents\\Selenium\\SeleniumPracticeSite\\src\\URL.properties"); 
prop.load(urlFile); 
driver.get(prop.getProperty("URL")); 
WebDriverWait myDynamicElement = new WebDriverWait(driver,30); 
myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='userName']"))); 
} 

@Test  
public void loginToTours() throws InterruptedException 
{ 

    driver.findElement(By.xpath("//input[@name='userName']")).click(); 
    //sendKeys(prop.getProperty("login")); 

} 

} 

TestNG的XML

<?xml version="1.0" encoding="UTF-8"?> 
    <suite name = "Automation Practice Test"> 
    <test name ="smoke test"> 
     <groups> 
     <run> 
      <include name="Priority2" /> 
     </run> 
     </groups> 
     <classes> 
      <class name ="SeleniumPracticePackage.CallUrl" /> 
     </classes> 
     </test> 
    </suite> 

网站的HTML源代码

    <tr> 
        <td align="right"><font face="Arial, Helvetica, sans-serif" size="2">User 
        Name: </font></td> 
        <td width="112"> 
        <input type="text" name="userName" size="10"> 
        </td> 
       </tr> 
+0

我在正确的页面。一旦硒加载页面,我测试了我的xpath。加载URL的方法是openURL()... driver.get(prop.getProperty(“URL”)); – Tokci

+0

生成此消息的XML是什么? –

+0

在最后添加了xml – Tokci

问题在于你的测试代码。

说明:在测试类中有两个@Test方法。其中一个打开一个URL并等待一个元素出现,另一个只搜索该元素。如果TestNG首先运行您的loginToTours()测试方法,那么您将看到此错误消息。默认情况下,TestNG按字母顺序执行方法。由于loginToTours()没有指定findElement()位于哪个网页,因此Selenium最终在空白页面上执行它,因此您会看到错误消息。其中一个修复方法是让loginToTours()方法取决于openURL(),这样在搜索前就已经在浏览器中打开了一个有效的网页。 [这正是我在清理过的代码中完成的工作]。

webdriver的是无过错这里:)

这里是你的测试代码清理版本,做工精细

public class CallUrl { 
    WebDriver driver; 

    @BeforeClass 
    public void openBrowser() throws IOException { 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("chrome.switches", "--disable-extensions"); 
     driver = new ChromeDriver(options); 
    } 

    @AfterClass 
    public void cleanup() { 
     if (driver != null) { 
      driver.quit(); 
     } 
    } 

    @Test 
    public void openURL() throws IOException { 
     driver.get("http://newtours.demoaut.com/"); 
     WebDriverWait myDynamicElement = new WebDriverWait(driver, 30); 
     myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='userName']"))); 
    } 

    @Test (dependsOnMethods = "openURL") 
    public void loginToTours() throws InterruptedException { 
     driver.findElement(By.xpath("//input[@name='userName']")).click(); 
    } 

} 
+0

谢谢,为了完美的回答:-) – Tokci

+0

如果有帮助,你能接受我的回答吗? –

你的XPath正在搜索input标签,这是不存在在你的XML。

+0

参考输入标记 – Tokci

+0

右键,您需要指定您正在解析的**确切XML **。你说你正在解析的XML没有输入标签,而你随机放入注释的输入标签不是你问题中XML的一部分。 –

+0

您是否在寻找TestNG使用的XML或网站的HTML/CSS代码?我粘贴的是HTML使用的网站和XML粘贴问题是TestNG XML ..我也给链接到网站 – Tokci