使用Selenium为IE设置兼容模式

时间:2018-08-01 17:45:19

标签: selenium internet-explorer selenium-webdriver internet-explorer-11 selenium-iedriver

来自先前的讨论。我正在通过Selenium和IE驱动程序使用IE 11。 我正在查看的网站(我无法控制)需要IE 5或更高版本。 我正在使用IE11。正如某人告诉我的那样,IE 11返回“ Netscape”作为应用程序名称,而不是“ Internet Explorer”。我的猜测是该网站正在寻找“ Internet Explorer”。

我们可以通过设置兼容模式来克服这一问题。但是,运行IE的Jenkins服务器无法登录,因此我无法登录并设置模式。

我想在IE启动时设置兼容模式。有一项提到做 ALT-T兼容模式,然后填写URL并关闭。手动可以正常工作,但我正在尝试自动执行。我想出了这个无效的代码。甚至ALT-T也不起作用。我认为某些原因是无法正确发送密钥:

        WebElement ele = driver.findElement(By.xpath("//html"));
        Actions action = new Actions(driver);
        action.moveToElement(ele).click().build().perform();
        action.sendKeys(Keys.LEFT_ALT).sendKeys("t").build().perform();

        for (int i = 1; i <= 11; i++) {
            action.sendKeys(Keys.DOWN).build().perform();
        }
        action.sendKeys(Keys.ENTER).build().perform();
        action.sendKeys(url).build().perform();
        action.sendKeys(Keys.ENTER).build().perform();
        for (int i = 1; i <= 4; i++) {
            action.sendKeys(Keys.TAB).build().perform();
        }
        action.sendKeys(Keys.ENTER).build().perform();

这没有显示工具栏或任何被忽略的东西。没有异常或任何异常。那么有没有办法做到这一点?

如果没有,当我们为IE驱动程序设置所需的功能以指定URL的兼容模式时,是否有其他方法,或者在获得驱动程序时有其他方法?我没有看到任何字段。

Keys.chord()也不起作用。

2 个答案:

答案 0 :(得分:1)

下面的代码对于IE11来说非常适合我

公共类ieCompatibilityViewSettings {

public static void main(String[] args) throws InterruptedException, AWTException {

    WebDriver driver = new InternetExplorerDriver();
    driver.get("http://gmail.com");
    Thread.sleep(3000);

    Robot rob = new Robot();

    rob.keyPress(KeyEvent.VK_ALT);
    rob.keyPress(KeyEvent.VK_X);
    rob.keyRelease(KeyEvent.VK_X);
    rob.keyRelease(KeyEvent.VK_ALT);

    for (int i = 1; i <= 9; i++) {
        rob.keyPress(KeyEvent.VK_DOWN);
        rob.keyRelease(KeyEvent.VK_DOWN);
    }

    rob.keyPress(KeyEvent.VK_ENTER);
    rob.keyRelease(KeyEvent.VK_ENTER);
    Thread.sleep(1000);
    rob.keyPress(KeyEvent.VK_TAB);
    rob.keyRelease(KeyEvent.VK_TAB);
    Thread.sleep(1000);
    rob.keyPress(KeyEvent.VK_ENTER);
    rob.keyRelease(KeyEvent.VK_ENTER);
    Thread.sleep(1000);
    rob.keyPress(KeyEvent.VK_ESCAPE);
    rob.keyRelease(KeyEvent.VK_ESCAPE);

}

答案 1 :(得分:0)

Microsoft在Internet Explorer中的兼容性视图/模式

根据Compatibility View / Mode in Microsoft IE10 and IE11兼容性视图/模式已在Internet Explorer 8中引入,以帮助现有内容继续与Internet Explorer 7配合使用,从而为开发人员提供了时间来更新其内容以支持较新的版本网络标准。在以前版本的Internet Explorer中,“兼容性视图”按钮将通过使页面像在Internet Explorer 7中一样显示来尝试修复损坏的基于标准的网站。但是,如今,许多基于标准的网站都试图通过显示为类似的方式来破坏他们是在Internet Explorer 7中完成的。

在IE 10或更早版本的IE早期版本中,IE提供了复选框Display all websites in Compatibility View选项。此选项导致当今基于标准的网站出现问题。在 IE 11 中,该选项和Compatibility View按钮已被删除。保留了“兼容性视图”添加选项,以允许用户基于各个基准将网站置于兼容性视图/模式中。此外,Microsoft保留了复选框Display intranet sites in Compatibility View选项。如今,大多数Intranet网站和基于Web的设备也符合基于标准的Web设计,并且此选项通常不那么重要。

在IE 10等早期版本的IE中,“兼容性视图”按钮将指示网站处于“兼容性视图/模式”。 将鼠标悬停在“兼容性视图”按钮上时,将显示“兼容性视图”弹出消息。在IE 11中,“兼容性视图”按钮被删除。

IE 11

中禁用兼容性视图/模式设置的步骤

步骤1:

  • 打开Internet Explorer(IE 11)
  • 按键盘上的Alt键,这将显示一个菜单栏
  • 点击“工具”菜单标签
  • 选择“兼容性视图”设置选项

第2步:

  • 在IE 11中,在兼容性视图中显示所有网站选项不可用
  • 取消选中在“兼容性视图”中显示Intranet网站选项

注意:如果您认为某个网址可以从使用“兼容性视图/模式”中受益,则可以将其添加到“兼容性视图”框中。

有时候,网站看起来并不像您期望的那样-图像可能不会出现,菜单可能不正确,文本可能会混杂在一起。这可能是由于Internet Explorer与您所在的站点之间的兼容性问题引起的。有时,可以通过将站点添加到“兼容性视图”列表中来解决此问题。

根据Fix site display issues with Compatibility View in Internet Explorer 11将网站添加到Compatibility View列表中:

  • 打开Internet Explorer,选择“工具”按钮,然后选择“兼容性视图”设置。
  • 在“添加此网站”下,输入要添加到列表中的网站的URL,然后选择“添加”。

注意:如果您将网站添加到Compatibility View list,并且页面看上去更糟,则可能不是兼容性问题,应从列表中删除该网站。

打开兼容性视图后,每次访问Internet Explorer都会在兼容性视图中自动显示该网站。您可以通过从兼容性列表中删除该站点来关闭它。并非所有网站显示问题都是由浏览器不兼容引起的。 Internet连接中断,流量大或网站出现问题也可能影响页面的显示方式。

要清除Compatibility View个网站的列表,请执行以下操作:

  • 打开Internet Explorer,选择“工具”按钮,然后选择“ Internet选项”。
  • 在“浏览历史记录”下,选择“删除”。
  • 在“删除浏览历史记录”对话框中,选中“历史记录”复选框,然后选择“删除”。

结论

在通过 Selenium IEDriverServer 使用 IE 11 时,您无需担心兼容性视图 >,因为此功能已从 IE 11 中删除。

参考

您可以在IE11 fails with “Netscape is not supported please used internet explorer” error when launch by Selenium

中找到相关的讨论