Java Xpath是正确的,但仍然无法获取此类元素:无法定位元素
我的Xpath是正确的&没有iFrame,我可以在Chrome控制台中找到元素,但我的程序仍然失败。我也使用了显式等待 网站 我正在尝试定位登录页面并发送登录id 错误消息: 已通过:openURL 失败:LoginTours **org.openqa.selenium.NoSuchElementException**:*没有这样的元素:无法找到元素:{“方法”:“xpath”,“选择器”:”//input[@name='userName']”** ***元素信息:{Using=xpath,value=//input[@name='userName']} testngxmlJava Xpath是正确的,但仍然无法获取此类元素:无法定位元素,java,selenium,xpath,selenium-webdriver,selenium-chromedriver,Java,Selenium,Xpath,Selenium Webdriver,Selenium Chromedriver,我的Xpath是正确的&没有iFrame,我可以在Chrome控制台中找到元素,但我的程序仍然失败。我也使用了显式等待 网站 我正在尝试定位登录页面并发送登录id 错误消息: 已通过:openURL 失败:LoginTours **org.openqa.selenium.NoSuchElementException**:*没有这样的元素:无法找到元素:{“方法”:“xpath”,“选择器”:”//input[@name='userName']”** ***元素信息:{Using=xpath,va
<?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>
使用者
姓名:
您的XPath正在搜索XML中不存在的输入标记。问题在于测试代码
说明:在测试类中有两个@Test
方法。其中一个打开URL并等待元素出现,另一个方法只搜索该元素。如果TestNG首先运行您的loginToTours()
test方法,您将看到此错误消息。默认情况下,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();
}
}
我在正确的页面。selenium加载页面后,我测试了xpath。加载URL的方法是openURL()。。。获取(prop.getProperty(“URL”);生成此消息的XML是什么?最后添加的XML在XML中的input
标记在哪里?公共网站参考输入标记,您需要指定您在此处解析的确切XML。你说你正在解析的XML没有输入标记,而你刚才随机放在评论中的输入标记不是你问题中XML的一部分。你在寻找TestNG或网站HTML/CSS代码使用的XML吗?我粘贴的是网站上使用的HTML,粘贴的xml是TestNG xml。。我还提供了该网站的链接,谢谢你的完美回答:-)
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();
}
}