Java Selenium WebDriver和InternetExplorer

Java Selenium WebDriver和InternetExplorer,java,internet-explorer,selenium,selenium-webdriver,Java,Internet Explorer,Selenium,Selenium Webdriver,我最近更新了Selenium 2.24.1以使Firefox13正常工作。有了这个更新,你现在可以运行一个类似于chromedriver.exe的可执行文件,它可以向IE发送事件。但是,我没有运气让IE运行测试。为了让chrome运行,我显然也必须设置webdriver.chrome.driver位,但在它和Firefox中使用相同的代码,一切都很好 以下是我的源代码: public class GoogleTest { @Test public void test() throws Exce

我最近更新了Selenium 2.24.1以使Firefox13正常工作。有了这个更新,你现在可以运行一个类似于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)

这可能是非常明显的,但由于您在原始帖子中没有提及,并且您刚刚下载了驱动程序,并且您的内部玩具应用程序正在运行,您是否按照IEDriver代码页上的说明再次检查了IE中的安全设置:

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


如果您以前使用的是早期版本的Selenium,您可能已经这样做了,但我认为值得检查以确保…

嗯,错误消息是误导性的,至少在我的情况下是这样。我有一个系统被系统管理员以保护模式锁定:关闭。所以我无法切换保护模式。然后我意识到系统有一个管理员用户,所以以管理员用户身份登录并尝试切换保护模式。它仍然是残废的。然后我在管理员用户帐户下运行Selenium,一切正常

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

使用下面的代码

System.setProperty("webdriver.ie.driver", "E:\\Selenium\\workspace\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();

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


希望能有所帮助。

我也遇到过类似的问题。Internet选项中有一个设置需要打开才能正常工作。高级>设置>安全性>允许活动内容在我的计算机上的文件中运行


选中此框后,我的IE测试工作正常,可以找到元素并与浏览器交互。

这段代码在IE8和Windows XP SP3 32位上非常适合我。您使用的是哪个IE和/或操作系统?您是否绝对确定您使用的是最新的IEDriverServer.exe而不是旧的?它打开谷歌页面了吗?我在IE9 Windows 7上。我是昨天才从下载区出来的。我尝试了64位和32位版本的IEDriverServer。Google页面打开得很好,但只要我尝试与驱动程序交互,就好像信息从未发送到驱动程序。好的。还有别的办法吗?比如说,在本地html页面上键入包含单个输入的表单?或有什么事吗?嗯,现在我们有进展了。如果我在本地使用我的示例toy webapp,我就能够与事物进行交互,但是一旦我接触到外部站点,事情就会失败(即使页面加载)。@Slanec你能告诉我IEDriverServer有什么好处吗?我使用selenium独立服务器运行测试,它一直在运行。一组更新决定禁用这些设置,而“忽略安全”域引入的“flakines”也没有任何作用。谢谢,我忘记了这一步(使用与原来不同的Windows VM)。我处于调试模式,webdriver找不到任何东西,无法打印页面源代码,它所能做的就是打开页面。我被难住了。再次感谢!这在IE8浏览器中不适用于我。我启用并禁用“启用保护模式”,然后尝试,但我仍然在eclipse中遇到错误,请检查我的代码