没有Thread.sleep Webdriver IE将给出“无法找到元素”的异常

时间:2015-04-06 16:55:47

标签: java eclipse selenium selenium-webdriver internet-explorer-11

我是初学者,需要帮助。我到处都是谷歌,并尽我所能,仍然找不到这个IE 11问题的答案。我的脚本在Firefox和Chrome中运行良好,但出于某种原因IE 11 32bit给我这个错误“无法找到元素......”如果我在驱动程序找到元素之前添加“线程睡眠” 它运行但很慢。我不想将Thread sleep添加到我脚本的每一行,它会慢慢运行!必须有一些我错过的东西。寻找在IE 11上运行此解决方案的解决方案没有这个例外。请帮忙。

以下是我已经做过的一些笔记,我正在使用的内容,我的脚本以及我的错误。

  1. 我用Google搜索了什么 “Webdriver IE无法找到元素”并检查了所有链接,但仍无法找到解决方案

  2. 使用Eclipse,用Java编写我的脚本

  3. 版本:11.0.9600.17691 更新版本:11.0.17(KB3032359)

  4. 此链接---> code.google.com/p/selenium/wiki/InternetExplorerDriver
    - 使用IE 32bit进行测试。我做了32位和64位版本的浏览器(IEDriverServer.exe)(64位运行速度很慢,但在某处读取它是一个错误,所以我一直在测试32位) - 我已经使用IE 11完成了所有必需的配置。(为每个区域设置保护模式设置以启用保护模式,将浏览器缩放级别设置为100%,为64位Windows安装设置注册表项

  5. 使用了webdriverwait并且无效。示例如下。

    WebDriverWait(驱动程序,30)。直到(ExpectedConditions.visibilityOfElementLocated(By.linkText( “双方”)))点击();

  6. Went to microsoft and download the IE webdriver tool for IE 11 (win 7 –KB2990999-x64.msu) and didn’t resolve the issue

  7. 我发现IE的内容。这是真的吗?

    IEDriverServer.exe在本地计算机上启动HTTP服务器。您的语言绑定使用HTTP客户端使用JSON-over-HTTP有线协议与服务器通信。但是,启动此HTTP服务器不是即时的; IEDriverServer.exe初始化它并准备好从语言绑定客户端接收HTTP请求需要一些时间。当您从Java代码调用“new InternetExplorerDriver()”时,Java语言绑定会启动IEDriverServer.exe,但必须等待HTTP服务器准备就绪。它通过使用HttpClient类轮询服务器来等待,直到它收到有效的响应。您所看到的是驱动程序说:“IEDriverServer.exe的HTTP服务器尚未接收连接,只是让您知道。”

  8. 我的测试脚本

    public void TestThread() throws Exception {
    System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer.exe");
    driver = new InternetExplorerDriver();
    driver.get(baseUrl);
    driver.manage().window().maximize();
    driver.findElement(By.xpath("//a[contains(@href, '?p=n&sectid=38')]")).click();
    driver.findElement(By.name("login_email")).clear();
    driver.findElement(By.name("login_email")).sendKeys("1000016");
    driver.findElement(By.name("login_password")).clear();
    driver.findElement(By.name("login_password")).sendKeys("testing123");
    driver.findElement(By.id("setLogin")).click();
    driver.findElement(By.linkText("Parties")).click();
    driver.findElement(By.linkText("d327_host1_FF")).click();
    driver.findElement(By.linkText("Review Bookings")).click();
    driver.findElement(By.id("addNewBooking")).click();
    
  9. 我的错误

  10.   

    启动InternetExplorerDriver服务器(32位)   2.42.0.0侦听端口2619 FAILED:TestThread org.openqa.selenium.NoSuchElementException:无法找到元素   链接文本==缔约方(警告:服务器未提供任何内容)   stacktrace information)命令持续时间或超时:308毫秒

    1. WebDriver等不适合我

      WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Parties"))).click();
      WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("d327_host1_FF"))).click();
      WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Review Bookings"))).click();
      WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.id("addNewBooking"))).click();
      WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.id("guests-booking-modal-element-2"))).sendKeys("Booking added at party order");
      
    2. webdriverwait错误

    3.   

      启动InternetExplorerDriver服务器(32位)   2.42.0.0   在港口35252上听   失败:TestThread   显示java.lang.NullPointerException       在firsttestngpackage.TestIEUnableToFindElement.TestThread(TestIEUnableToFindElement.java:57)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

1 个答案:

答案 0 :(得分:0)

不要使用WebDriverWait为findElement方法打扰(如果找不到该元素,则无法检查可见性)。这可以使用驱动程序本身的隐式等待设置来完成。

driver.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);

在实例化驱动程序之后立即设置它,并且它将等待最多30000毫秒(30秒)的元素存在,然后在无法找到具有findElement的元素时抛出异常。

值得注意的是,WebDriverWait非常有用。只是不在这个特定的用例中。