无法使用Selenium2(Webdriver)与Java一起启动IE浏览器

时间:2013-02-19 07:47:14

标签: java internet-explorer selenium-webdriver

我无法启动IE浏览器来运行用Java编写的selenium自动化测试。我正在使用Windows 7和IE 9.以下是我的代码:

请找到附件。enter image description here

public class GoogleNews {
    private WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    ArrayList al = new ArrayList();
    @Before
    public void setUp() throws Exception {
        //driver = new FirefoxDriver();
        driver =new InternetExplorerDriver();
        baseUrl = "https://news.google.co.in/";

    }

    @Test
    public void testApple() throws Exception {
        driver.get(baseUrl);
    }
}

10 个答案:

答案 0 :(得分:127)

需要在所有区域中设置相同的安全级别。为此,请按照以下步骤操作:

  1. 打开IE
  2. 转到工具 - >互联网选项 - >安全
  3. 将所有区域(Int​​ernet,本地Intranet,受信任的站点,受限制的站点)设置为相同的保护模式,启用或禁用无关紧要。
  4. 最后,通过右键单击位于右上角的齿轮并启用状态栏,将“缩放”级别设置为100%。 默认缩放级别现在显示在右下方。

答案 1 :(得分:18)

正如堆栈跟踪所示,您需要将IE中所有区域的保护模式设置设置为相同。在此处阅读原因:http://jimevansmusic.blogspot.in/2012/08/youre-doing-it-wrong-protected-mode-and.html

以及如何从同一链接快速操作:“在IE中,从”工具“菜单(或更高版本工具栏中的齿轮图标)中选择”Internet选项“。转到”安全“选项卡。对于每个区域的对话框,您应该看到一个标记为“启用保护模式”的复选框。将复选框的值设置为每个区域的选中或取消选中的相同值“

答案 2 :(得分:12)

下面的WebDriver Java代码片段应该可以用来启动IE。代码将忽略IE浏览器中所有区域的保护模式设置的设置。

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
File file = new File("D:\\Ripon Al Wasim\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver(capabilities);
driver.get("https://www.google.com/");

下载IEDriverServer并将其解压缩到您想要的位置并设置绝对路径(在上面的示例中,它是“D:\ Ripon Al Wasim \ IEDriverServer.exe”)

答案 3 :(得分:3)

  1. 转到IE->Tools->Internet Options
  2. 转到“安全”标签。
  3. 启用/禁用所有(Internet,本地Intranet,受信任的站点和受限制的站点)的受保护模式。

答案 4 :(得分:3)

要解决此问题,您必须做两件事:

  1. 您需要在目标计算机上设置一个注册表项 驱动程序可以保持与Internet实例的连接 它创建的资源管理器。

  2. 更改该计算机上Internet Explorer浏览器的一些设置     (您希望运行自动化的地方)。

  3. 1。设置注册表项/条目:

    • 要设置注册表项或条目,您需要打开“注册表编辑器”。

    • 要打开“注册表编辑器”,请按Windows按钮键+ r字母键 这将打开“运行窗口”,然后键入“regedit”并按Enter键。

    • 或按Windows键,然后在开始菜单中输入“regedit” 按回车键。现在,根据您的操作系统类型,是否遵循32/64位 相应的步骤。

    Windows 32位: 转到此位置 - “HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl”并检查“FEATURE_BFCACHE”键。

    Windows 64位: 转到此位置 - HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl并检查“FEATURE_BFCACHE”键。 请注意 FEATURE_BFCACHE 子项可能存在,也可能不存在,如果不存在,则应创建

    重要提示:在此键内,创建一个名为iexplore.exe的值为0的DWORD值。

    Registry Setting

    2。更改Internet Explorer浏览器的设置:

    • 点击设置按钮,然后选择“互联网选项”

    • 在“互联网选项”窗口中,转到“安全”标签

    • 现在选择“Internet”选项并取消选中“启用保护模式”复选框,并将“安全级别”更改为低。

    • 现在选择“本地Intranet”选项并将“安全级别”更改为低。

    • 现在选择“可信站点”选项并将“安全级别”更改为低。

    Internet Options

    • 现在点击“应用”按钮,可能会出现一个警告,单击“确定”按钮进行警告,然后点击“Internet选项”窗口中的“确定”按钮。

    Save Settings

    • 重新启动浏览器后。

答案 5 :(得分:2)

不是使用IEDriverServer.exe的绝对路径,而是根据项目使用相对路径更好。

        DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
        capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        File fil = new File("iDrivers\\IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver", fil.getAbsolutePath());
        WebDriver driver = new InternetExplorerDriver(capabilities);        
        driver.get("https://www.irctc.co.in");          

答案 6 :(得分:2)

对于NighwatchJS使用:

"ie" : {
  "desiredCapabilities": {
    "browserName": "internet explorer",
    "javascriptEnabled": true,
    "acceptSslCerts": true,
    "allowBlockedContent": true,
    "ignoreProtectedModeSettings": true
  }
},

答案 7 :(得分:1)

由于我的保护模式设置已被禁用,因此我无法对其进行手动修改。但是下面的用于更新注册表值的VBA代码片段对我来说是成功的窍门。(尝试之前,请注意您组织对修改注册表的任何限制)

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set ScriptMe=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

'Disable protected mode for local intranet'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

'Disable protected mode for trusted pages'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

'Disable protected mode for internet'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

'Disable protected mode for restricted sites'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

msgbox "Protected Mode Settings are updated"

只需将上面的代码复制粘贴到记事本中,并以.vbs扩展名保存并双击即可!

现在尝试再次运行自动化脚本

答案 8 :(得分:0)

在开始使用Internet Explorer和Selenium Webdriver之前,请考虑以下两个重要规则。

  • 缩放级别:应设置为默认值(100%)和
  • 安全区域设置:对所有人都应该相同。应根据您的组织权限设置安全设置。

如何设置?

  • 只需转到Internet Explorer,手动执行这两项操作。而已。不是秘密。
  • 通过您的代码完成。

方法1

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();

    capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);

    System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");

    WebDriver driver= new InternetExplorerDriver(capabilities);


    driver.get(baseURl);

    //Identify your elements and go ahead testing...

这肯定会不显示任何错误,浏览器会打开,并且还会导航到该网址。

不会识别任何元素,因此您无法继续。

为什么呢?因为我们已经模拟了这个错误,并要求IE打开并获取该URL。但是,只有当浏览器缩放为100%时,Selenium才会识别元素。默认。 所以最终的代码是

方法2强大且完整的证明方式

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();

    capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);

    System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");

    WebDriver driver= new InternetExplorerDriver(capabilities);


    driver.get(baseURl);

    driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL,"0"));

    //Identify your elements and go ahead testing...

希望这会有所帮助。如果需要进一步的信息,请告诉我。

答案 9 :(得分:0)

想要共享实际的代码,因为仍然很少有人对如何实现它感到困惑。这是针对C#NUNIT实现的。您需要执行此操作,因为您的公司出于明显的原因可能不允许您更改默认安全设置。祝好运!

InternetExplorerOptions options = new InternetExplorerOptions();
            options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
            options.IgnoreZoomLevel = true;
            driver = new
                InternetExplorerDriver("C:\\Users\\stdd\\Desktop\\SLL\\SLLAutomation" +
                "\\Clysis\\STGSearch\\STGClaSearch\\Driver\\", options);
            driver.Manage().Window.Maximize();