我是初学者,需要帮助。我到处都是谷歌,并尽我所能,仍然找不到这个IE 11问题的答案。我的脚本在Firefox和Chrome中运行良好,但出于某种原因IE 11 32bit给我这个错误“无法找到元素......”如果我在驱动程序找到元素之前添加“线程睡眠” 它运行但很慢。我不想将Thread sleep添加到我脚本的每一行,它会慢慢运行!必须有一些我错过的东西。寻找在IE 11上运行此解决方案的解决方案没有这个例外。请帮忙。
以下是我已经做过的一些笔记,我正在使用的内容,我的脚本以及我的错误。
我用Google搜索了什么 “Webdriver IE无法找到元素”并检查了所有链接,但仍无法找到解决方案
使用Eclipse,用Java编写我的脚本
版本:11.0.9600.17691 更新版本:11.0.17(KB3032359)
此链接---> code.google.com/p/selenium/wiki/InternetExplorerDriver
- 使用IE 32bit进行测试。我做了32位和64位版本的浏览器(IEDriverServer.exe)(64位运行速度很慢,但在某处读取它是一个错误,所以我一直在测试32位)
- 我已经使用IE 11完成了所有必需的配置。(为每个区域设置保护模式设置以启用保护模式,将浏览器缩放级别设置为100%,为64位Windows安装设置注册表项
使用了webdriverwait并且无效。示例如下。
WebDriverWait(驱动程序,30)。直到(ExpectedConditions.visibilityOfElementLocated(By.linkText( “双方”)))点击();
我发现IE的内容。这是真的吗?
IEDriverServer.exe在本地计算机上启动HTTP服务器。您的语言绑定使用HTTP客户端使用JSON-over-HTTP有线协议与服务器通信。但是,启动此HTTP服务器不是即时的; IEDriverServer.exe初始化它并准备好从语言绑定客户端接收HTTP请求需要一些时间。当您从Java代码调用“new InternetExplorerDriver()”时,Java语言绑定会启动IEDriverServer.exe,但必须等待HTTP服务器准备就绪。它通过使用HttpClient类轮询服务器来等待,直到它收到有效的响应。您所看到的是驱动程序说:“IEDriverServer.exe的HTTP服务器尚未接收连接,只是让您知道。”
我的测试脚本
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§id=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();
我的错误
启动InternetExplorerDriver服务器(32位) 2.42.0.0侦听端口2619 FAILED:TestThread org.openqa.selenium.NoSuchElementException:无法找到元素 链接文本==缔约方(警告:服务器未提供任何内容) stacktrace information)命令持续时间或超时:308毫秒
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");
webdriverwait错误
启动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)
答案 0 :(得分:0)
不要使用WebDriverWait为findElement方法打扰(如果找不到该元素,则无法检查可见性)。这可以使用驱动程序本身的隐式等待设置来完成。
driver.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);
在实例化驱动程序之后立即设置它,并且它将等待最多30000毫秒(30秒)的元素存在,然后在无法找到具有findElement的元素时抛出异常。
值得注意的是,WebDriverWait非常有用。只是不在这个特定的用例中。