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

Without Thread.sleep Webdriver IE will give “unable to find element” exception

我是初学者,需要帮助。我到处都是 google 并尽我所能,但仍然找不到这个 IE 11 问题的答案。我的脚本 运行 在 Firefox 和 Chrome 中运行良好,但出于某种原因,IE 11 32 位给我这个错误“无法找到元素......”如果我在 driver 之前添加“线程睡眠”查找元素 它 运行s 但很慢。我不想将 Thread sleep 添加到脚本的每一行,它会 运行 缓慢!一定有什么我错过了。在 IE 11 w/o 上寻找 运行 这个异常的解决方案。请帮忙

下面是我已经做过的一些笔记、我正在使用的内容、我的脚本和我的错误。

  1. 我googled “Webdriver IE 无法找到元素”并检查了所有 link 仍然找不到解决方案

  2. 使用 Eclipse,在 Java

  3. 中编写我的脚本
  4. Version:11.0.9600.17691 更新 Version:11.0.17 (KB3032359)

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

  6. 用过 webdriverwait 没用。示例如下。

    WebDriverWait(driver,30).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Parties"))).click();

  7. 去微软下载IE 11的IE webdriver工具 (win 7 –KB2990999-x64.msu) 并没有解决问题

  8. 我对 IE 的发现。这是真的吗?

    IEDriverServer.exe 在您的本地计算机上启动 HTTP 服务器。您的语言绑定使用 HTTP 客户端通过 JSON-over-HTTP 有线协议与服务器通信。但是,启动这个 HTTP 服务器不是瞬间的; IEDriverServer.exe 需要一些时间来初始化它并准备好接收来自语言绑定客户端的 HTTP 请求。当您从 Java 代码调用 "new InternetExplorerDriver()" 时,Java 语言绑定会启动 IEDriverServer.exe,但随后必须等待 HTTP 服务器准备就绪。它通过使用 HttpClient class 轮询服务器来等待,直到收到有效响应。你看到的是 driver 说法,"The IEDriverServer.exe's HTTP server isn't receiving connections yet, just letting you know."

  9. 我的测试脚本

    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();
    
  10. 我的错误

Started InternetExplorerDriver server (32-bit) 2.42.0.0 Listening on port 2619 FAILED: TestThread org.openqa.selenium.NoSuchElementException: Unable to find element with link text == Parties (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 308 milliseconds

  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. webdriver等待错误

Started InternetExplorerDriver server (32-bit) 2.42.0.0 Listening on port 35252 FAILED: TestThread java.lang.NullPointerException at firsttestngpackage.TestIEUnableToFindElement.TestThread(TestIEUnableToFindElement.java:57) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

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

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

只需在实例化您的驱动程序后立即设置它,它会等待最多 30000 毫秒(30 秒)让元素存在,然后在无法使用 findElement 找到元素时抛出异常。

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