Java Xpath是正确的,但仍然无法获取此类元素:无法定位元素

Java 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

我的Xpath是正确的&没有iFrame,我可以在Chrome控制台中找到元素,但我的程序仍然失败。我也使用了显式等待

网站 我正在尝试定位登录页面并发送登录id

错误消息:

已通过:openURL 失败:LoginTours **org.openqa.selenium.NoSuchElementException**:*没有这样的元素:无法找到元素:{“方法”:“xpath”,“选择器”:”//input[@name='userName']”** ***元素信息:{Using=xpath,value=//input[@name='userName']} testngxml

<?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();
    }

}