WebDriver无法使用Java通过xpath找到元素

use*_*076 2 java testing selenium xpath webdriver

以下是使用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");
Run Code Online (Sandbox Code Playgroud)

执行代码后,我得到以下异常:

线程"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:sun.reflect.NativeConstructorAccessorImpl.newInstance0(本地方法)中的sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源)sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)处的RemoteWebDriver org.openqa.selenium.remote上的org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)中的java.lang.reflect.Constructor.newInstance(未知来源).ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105 )org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:409)org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:192)at org.openqa.selenium.remote.RemoteWebDri ver.findElementByXPath(RemoteWebDriver.java:265)org.openqa.selenium.By $ 6.findElement(By.java:205)at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:184)at test.主(test.java:24)

我的代码有什么问题?

Rip*_*sim 5

你的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);
Run Code Online (Sandbox Code Playgroud)

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

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")));
Run Code Online (Sandbox Code Playgroud)