【问题标题】:Without Thread.sleep Webdriver IE will give “unable to find element” exception没有 Thread.sleep Webdriver IE 将给出“无法找到元素”异常
【发布时间】:2015-04-06 16:55:46
【问题描述】:

我是初学者,需要帮助。我到处都有谷歌,尽了最大的努力,但仍然找不到这个 IE 11 问题的答案。我的脚本在 Firefox 和 Chrome 中运行良好,但由于某种原因 IE 11 32 位给我这个错误“无法找到元素...”如果我在驱动程序找到元素之前添加“线程睡眠” 它运行但缓慢。我不想将线程睡眠添加到脚本的每一行,它会运行缓慢!一定有什么我错过的。寻找在 IE 11 上运行此异常的解决方案。请帮忙。

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

  1. 我用谷歌搜索的内容 “Webdriver IE 找不到元素”并检查了所有链接仍然找不到解决方案

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

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

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

  5. 使用 webdriverwait 并没有工作。下面的例子。

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

  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. 我的错误

已启动 InternetExplorerDriver 服务器(32 位) 2.42.0.0 在端口 2619 上侦听失败:TestThread org.openqa.selenium.NoSuchElementException:无法找到元素 带有链接文本 == 各方(警告:服务器未提供任何 stacktrace 信息)命令持续时间或超时: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 错误

已启动 InternetExplorerDriver 服务器(32 位) 2.42.0.0 监听端口 35252 失败:测试线程 java.lang.NullPointerException 首先testngpackage.TestIEUnableToFindElement.TestThread(TestIEUnableToFindElement.java:57) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)

【问题讨论】:

  • 能否提供您正在测试的 HTML 片段?此外,WebDriverWait 应该可以工作!也许您可以尝试不同的选择器(不是 linkText,而是 id 或 cssSelector)?
  • 我没有看到代码中添加了任何明确的等待?
  • @sap1ens 我添加了 HTML 片段。你能给我一个 webdriverwait 的例子吗,因为它对我不起作用:(我没有这个元素的 ID 或 cssSelector。有链接和 xpath:link、xpath:href 和 xpath:position 我在哪里从 selenium IDE 中提取
  • @LittlePanda 我使用 webdriverwait 添加并收到以下错误

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 你太棒了!那成功了。我在我的其他脚本中有这个隐式等待,并认为这是没用的,因为完成我的脚本需要很长时间,所以我将时间 30000 更改为 5000 以更快地完成我的脚本。直到现在才把implicit和IE放在一起。不敢相信我没有在谷歌上看到这个。做得好!希望我可以投票给你的答案,但没有足够的声誉!
猜你喜欢
相关资源
最近更新 更多
热门标签