【发布时间】:2025-12-29 07:40:06
【问题描述】:
以下是使用Java的WebDriver代码的sn-p:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.pl/");
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.name("q"));
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
WebElement query = driver.findElement(By.xpath("//html/body/div[2]/span/center/form/table/tbody/tr/td[2]/div/div/input"));
query.sendKeys("asd");
执行代码后出现以下异常:
线程“main”中的异常 org.openqa.selenium.NoSuchElementException: 无法定位元素:{"method":"xpath","selector":"//html/body/div[2]/span/center /form/table/tbody/tr/td[2]/div/div/input"} 系统信息:os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.6.0_24' 驱动程序信息:driver.version:RemoteWebDriver 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:192) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:265) 在 org.openqa.selenium.By$6.findElement(By.java:205) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:184) 在 test.main(test.java:24)
我的代码有什么问题?
【问题讨论】:
-
XAPTH 表达式不会计算为现有元素,仅此而已。你必须改变表达方式。
-
xpath 应该在该站点上显示什么?
-
我正在测试一个 Web 应用程序,我只能通过 xpath 识别元素。所以我尝试在谷歌上做例子。在这两种情况下它都不起作用。该 xpath 是您输入单词然后单击搜索的输入。你能告诉我应该改变一个以上的表达吗?
-
取决于你的 HTML,你提供了一个无效的 xpath,这里 Selenium 没有问题。它完全按照应有的方式工作。
-
您的 xpath 太长(绝对 xpath),这是不好的做法。您应该尝试使用短 xpath(相对 xpath)。 CssSelector 比 xpath 更快。最好使用 id 或 name 而不是 xpath。您的 HTML 代码中是否有任何 ID 或名称?如果是,请使用 ID 或姓名
标签: java testing xpath selenium webdriver