Selenium InternetExplorerDriver无法找到明显存在的元素

时间:2014-11-05 10:08:10

标签: java selenium-webdriver

有一些细节。

  •     System.setProperty("webdriver.ie.driver", "res\\IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver.loglevel", "TRACE");
        System.setProperty("webdriver.ie.driver.logfile", "log\\selenium.log");
        DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();        ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
        WebDriver driver = new InternetExplorerDriver(ieCapabilities);
        driver.navigate().to("http://www.google.com");
        //System.out.println(driver.getPageSource());
        driver.findElement(By.id("lst-ib")).sendKeys("selenium");
        driver.findElement(By.name("btnK")).click();
    

- 控制台输出

Started InternetExplorerDriver server (64-bit)
2.44.0.0
Listening on port 41180
Log level is set to TRACE
Log file is set to C:\Users\xxxxx\workspace\SeleniumTest\log\selenium.log
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with id == lst-ib (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 342 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:03:00'
System info: host: 'xxxxxx', ip: 'xxxxx', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_25'

  • 问题

    它可以在ChromeDriver上运行,我可以输入“selenium”到输入字段并成功搜索它,但是为什么InternetExplorerDriver会得到这个例外?

  • 注意

    有人说这个网站应该在“Trusted”中安装Windows服务器, 他不确定为什么,但将google.com添加到信任解决了一个问题。 我不知道这种方式是否可以解决它,因为我的公司让我无法设置它。

  • UPDATE1

    我试图将wait语句添加到我的代码中,但得到以下错误。

    Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 90 seconds waiting for visibility of element located by By.id: lst-ib Caused by: org.openqa.selenium.NoSuchElementException: Unable to find element with id == lst-ib (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 309 milliseconds

  • 溶液

代码现在可以正常工作,最终代码如下:

            System.setProperty("webdriver.ie.driver", "res\\IEDriverServer.exe");
            System.setProperty("webdriver.ie.driver.loglevel", "TRACE");
            System.setProperty("webdriver.ie.driver.logfile", "log\\selenium.log");
            DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
         ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
            WebDriver driver = new InternetExplorerDriver(ieCapabilities);//
            driver.navigate().to("http://www.google.com");
            WebElement text =driver.findElement(By.name("q"));
            text.sendKeys("selenium");
            text.submit();

我需要告知我已将代码复制到我的同事计算机上运行它。一开始,我可以成功地工作,但我的同事没有;我们试过几次,出来的结果相同,我们发现IEDriverServer.exe没有被关闭,最后他重新启动了计算机,这么奇怪,代码可以成功运行。我不知道为什么。也许某些环境因素会影响IEDriverServer.exe或其他内容。

3 个答案:

答案 0 :(得分:1)

我很想知道你想在google.com上找到什么元素,同样好奇Chrome在该定位器中定位的元素。当我查看google.com并搜索id为lst-ib的元素时,没有结果。

我检查主谷歌搜索页面上输入搜索字段的ID为:id = gbqfq。

答案 1 :(得分:0)

正如@TheBear所说,我也没有找到任何带有id< lst-ib'的元素。 您可以将代码更改为以下代码以使其正常工作:

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

As' gbqfq'实际上是搜索框的ID,这在IE和FF中对我来说是正确的。

答案 2 :(得分:0)

Lahne,

我用你的第一个代码做了一个简单的测试,它在我的框架中完美运行。 您可能遇到的问题可能是在搜索 lst-ib 元素之前页面没有完全加载的问题。

WebDriver应该锁定你的代码,直到加载所有元素,但它只适用于HTML静态元素,动态加载的东西(通过ajax)不包括在内,所以,请注意这一点。

在寻找 lst-ib

之前,再次尝试睡眠时的第一个代码

这是我第一次尝试。

@Test
public void testIE() {
    getDriver().navigate().to("http://www.google.com");
    getDriver().findElement(By.id("lst-ib")).sendKeys(
            "selenium" + Keys.ENTER);
    Utils.sleep(5000);
}