使用硒中的镀铬驱动程序无法按名称查找元素?

时间:2017-09-26 06:26:34

标签: java selenium selenium-webdriver selenium-chromedriver

我有简单的selenium程序验证google中的值搜索框是否等于hello world但是我收到了这个错误:

  

线程中的异常" main"   org.openqa.selenium.NoSuchElementException:没有这样的元素:无法   定位元素:{"方法":"名称","选择器":" q"} ....

这是我的完整代码

public class SimpleSelenium {

  WebDriver driver = null;

public static void main(String args[]) {

    SimpleSelenium ss = new SimpleSelenium();
    ss.openBrowserInChrome();
    ss.getPage();
    ss.listenForHelloWorld();
    ss.quitPage();

}

private void openBrowserInChrome(){

    System.setProperty("webdriver.chrome.driver", "C:/chromedriver.exe");
    driver = new ChromeDriver();

}

private void quitPage() {

    driver.quit();
}

private void getPage() {
    driver.get("http://www.google.com");

}

private void listenForHelloWorld() {

    WebElement searchField = driver.findElement(By.name("q"));
    int count = 1;
    while (count++ < 20) {

        if (searchField.getAttribute("value").equalsIgnoreCase("hello world")) {
            break;
        }
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}




   }

2 个答案:

答案 0 :(得分:0)

您是否等到页面准备就绪并显示元素? 当页面仍在加载时,我经常遇到此错误。您可以添加类似

的内容

(MochaJS示例,几乎与JAVA测试的API相同)

InputStream is = null;
                try {
                    is = contentResolver.openInputStream(importedFileUri);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

等到元素可见。如果失败,将提高TIME_TO_WAIT_MS的超时。

答案 1 :(得分:0)

google搜索栏永远不会有#34; hello world&#34;因为你还没有输入它?

当您输入搜索时,如果您使用控制台检查元素,搜索字段值似乎也不会更新。

如果你只是学习我会写这样的测试并点击搜索按钮,然后确认&#34;你好世界&#34;搜索结果中的文字:

    WebElement searchField = driver.findElement(By.name("q"))
    searchField.sendKeys("Hello World")
    //Add code to click search button
    //Add code to assert results on next page

此外,我会完全更改您的listenForHelloWorld()方法并使用内置的WebDriver ExpectedConditions:

new WebDriverWait(driver, 10)
                .until(ExpectedConditions.textToBePresentInElement(searchField, "Hello World"))