Selenium WebDriver和InternetExplorer

4

我最近更新了Selenium 2.24.1以使Firefox 13能够正常工作。随着这个更新,你现在可以运行一个类似chromedriver.exe的可执行文件来将事件分派到IE。然而,我一直没有成功地让测试在IE中运行。为了让它在chrome中运行,我显然还要设置webdriver.chrome.driver位,但是相同代码在它和Firefox中运行良好。

以下是我的源代码:

public class GoogleTest {

@Test
public void test() throws Exception {
  System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");
  final WebDriver driver = new InternetExplorerDriver();
  driver.get("http://www.google.com");
  driver.findElement(By.name("q")).sendKeys("test");
  driver.findElement(By.name("q")).submit();
  driver.quit();
}

然而,当我执行这个测试时,遇到了以下堆栈跟踪:

org.openqa.selenium.NoSuchElementException: Unable to find element with name == q (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 395 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.24.1', revision: '17205', time: '2012-06-19 15:28:49'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_01'
Driver info: driver.version: RemoteWebDriver
Session ID: e20f8370-00ed-4bf6-a4fa-a0c09c2b6d8c
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:188)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:472)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:242)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:303)
at org.openqa.selenium.By$ByName.findElement(By.java:291)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:234)

我使用的是IE9 Windows 7操作系统。昨天我刚从下载区下载了相应的程序。我尝试过64位和32位版本的IEDriverServer。Google页面可以正常打开,但是一旦我尝试与驱动程序交互,就好像信息从未被发送到驱动程序一样。 - Scott
好的。其他任何功能都能正常工作吗?比如在包含单个输入的本地 HTML 页面上输入表单,或者其他任何操作? - Petr Janeček
嗯,现在我们有所进展了。如果我在本地使用我的示例玩具Web应用程序,我可以与其中的内容进行交互,但是一旦我尝试访问外部网站,事情就会失败(即使页面已经加载)。 - Scott
@Slanec,你能告诉我IEDriverServer有什么用吗?我使用selenium-standalone-server运行测试,它的工作方式与以往一样。 - Franz Ebner
如果我在Sauce Labs中测试这个,我会得到相同的元素未找到异常,但我的测试仍然会完成。 - Scott
显示剩余4条评论
5个回答

12

这可能非常明显,但由于您在原始帖子中没有提到它,并且只是下载了驱动程序,您的内部玩具应用程序正在工作,所以您是否像IEDriver代码页面上提到的那样仔细检查了IE中的安全设置:

在Windows Vista或Windows 7上的IE 7或更高版本中,您必须为每个区域设置受保护模式设置相同的值。该值可以为打开或关闭状态,只要每个区域的设置都相同即可。要设置受保护模式设置,请从“工具”菜单中选择“Internet选项...”,然后单击“安全”选项卡。对于每个区域,标签底部将有一个复选框,标记为“启用受保护模式”。

如果您之前使用过Selenium的旧版本,则很可能已经完成了此操作,但我认为检查一遍也无妨...


2
最近一组更新决定破坏了这些设置,而且即使使用“通过忽略安全域引入不稳定性”也没有起到任何作用。 - Scott
1
谢谢,我忘记了这一步(使用与原来不同的Windows虚拟机)。我当时处于调试模式,webdriver找不到任何东西,无法打印页面源代码,只能打开页面。我很困惑。再次感谢! - JCarter
这在IE8浏览器中对我不起作用。我尝试启用和禁用“启用保护模式”,但是在eclipse中仍然出现错误。请检查我的代码http://pastebin.com/TBxhptUB - Ankit jain

1

好的,错误信息至少在我的情况下是误导性的。我的系统被系统管理员锁定,并且受到保护模式的限制。因此,我无法切换到保护模式。然后我意识到系统有一个管理员用户,所以我以管理员用户身份登录并尝试切换保护模式。它仍然被禁用。然后我在管理员用户帐户下运行Selenium,一切都正常。

因此,您可能需要使用管理员权限登录才能运行Selenium。这个技巧对我有效。


0

请检查您下载的IEWebdriver服务器。如果您正在使用32位的IE,请下载并使用32位的IEWebdriver。

希望能帮到您。


0
我曾经遇到过非常类似的问题。在Internet选项中有一个需要打开的设置才能使其正常工作。高级选项 > 设置 > 安全 > 允许在我的计算机上运行活动内容。
一旦我勾选了这个选项,我的IE测试就像预期的那样工作了,并且可以找到元素并与浏览器进行交互。

0
请使用以下代码。
System.setProperty("webdriver.ie.driver", "E:\\Selenium\\workspace\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接