繁体   English   中英

WebDriver 使用 Java 通过 xpath 找不到元素

[英]WebDriver can't find element by xpath using Java

以下是使用 Java 的 WebDriver 代码片段:

        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");

执行代码后,出现以下异常:

线程“主”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:sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)处的 RemoteWebDriver sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)处 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)处java.lang.reflect.Constructor.newInstance(Unknown Source) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105 ) 在 org.o penqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:192) at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver. java:265) at org.openqa.selenium.By$6.findElement(By.java:205) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:184) at test.main(test.java: 24)

我的代码有什么问题?

您的 xpath 表达式:

WebElement query = driver.findElement(By.xpath("//html/body/div[2]/span/center/form/table/tbody/tr/td[2]/div/div/input"));

看起来正确,但如果您仍然遇到问题,请再次检查 xpath 的正确性。 如果再次失败,则将等待时间增加为:

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

或者您可以使用显式等待特定元素,如下所示:

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//html/body/div[2]/span/center/form/table/tbody/tr/td[2]/div/div/input")));

既然你想要波兰的谷歌网站

    //input[@title='Google Search']

不会为你工作。 而是使用

    //input[@title='Szukaj w Google']

@user729076:您为谷歌文本字段编写的 xpath "//html/body/div[2]/span/center/form/table/tbody/tr/td[2]/div/div/input" 不正确。 谷歌文本字段的 HTML 如下:

<input type="text" value="" autocomplete="off" name="q" class="gbqfif" id="gbqfq" style="border: medium none; padding: 0pt; margin: 0pt; height: auto; width: 100%; background: url(&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D&quot;) repeat scroll 0% 0% transparent; position: absolute; z-index: 6; left: 0px; outline: medium none;" dir="ltr" spellcheck="false">

基于上述 HTML,您可以简单地使用 id 或 xpath 如下: 通过 id:

driver.findElement(By.id("gbqfq")).sendKeys("some text");

通过 xpath:

driver.findElement(By.xpath("//input[@id='gbqfq']")).sendKeys("some text");

在这种情况下,您想要的 XPath 表达式是:

//html/body/center/form/table/tbody/tr/td[2]/div/input

或者你可以使用这个(更直观一点):

//input[@title='Google Search']

请记住,如果您要通过 XPath 识别很多元素,建议您精通 XPath,您可以从这里开始: Xpath 教程

同时,使用 Firefox 并安装以下插件:

萤火虫

FirePathFirefinder

这些将帮助您轻松识别有效的 XPath 表达式以用于您的网站。

使用的 XPath 不正确,此处直接使用 ID,因此无需使用 XPath。

driver.findElement(By.id("gbqfq")).sendKeys("xyz");

如果您想通过 XPath 查找元素。 然后执行以下操作:

WebDriver driver = new FirefoxDriver();
String baseUrl = "http://www.google.com";
Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
selenium.open("http://www.google.com");
selenium.isElementPresent(XPath Variable);

还可以在此站点上找到更多帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM