为什么IE驱动程序的ignoreProtectedModeSettings允许通过带有Protractor的id查找元素?

时间:2016-01-29 17:01:01

标签: selenium protractor

我通过一个非常简单的测试来学习量角器:

describe('Tick Tack Toe game', function() {
  it('marks positions as played', function() {
    browser.ignoreSynchronization = true;
    browser.get('file:///C:/Users/potero/angular/Angular_TickTackToe/ticktacktoe.html');
    var p00 = element(by.id("p00"));
    p00.click();
    expect(p00.getText()).toEqual("X");
  });
});

此测试几乎毫不费力地在Chrome中通过。但是我也必须在IE上进行测试,所以我在我的量角器配置文件中添加了必要的行,结果如下:

exports.config = {
    seleniumAddress : 'http://localhost:4444/wd/hub',
    specs : [ '../specs/**/*.protractorspec.js' ],
    multiCapabilities: [{
          'browserName': 'internet explorer'
        }, {
          'browserName': 'chrome'
        }]
};

Chrome仍然通过了测试,但由于每个区域的保护模式设置不同,因此无法启动IE。我让他们平等,我在this SO question上读到了。然后IE启动但测试失败导致IE无法找到id为p00的元素(请查看上面的规范)。通过读取控制台上的错误输出,我看到IE selenium驱动程序的属性名为" ignoreProtectedModeSettings"这被设置为false。这引起了我的注意,所以我重置了IE中的保护模式设置,并在我的量角器配置文件中添加了一行,结果如下:

exports.config = {
    seleniumAddress : 'http://localhost:4444/wd/hub',
    specs : [ '../specs/**/*.protractorspec.js' ],
    multiCapabilities: [{
          'browserName': 'internet explorer',
          'ignoreProtectedModeSettings': true
        }, {
          'browserName': 'chrome'
        }]
};

IE测试通过了。每次我跑它。那么,为什么与安全设置有关的属性允许我使用Protractor选择器按id查找元素?

1 个答案:

答案 0 :(得分:2)

保护模式背景

Internet Explorer的保护模式是一个安全沙箱,它依赖于Windows中的完整性级别系统。进程可能只有一个完整性级别(IL),因此如果您在Internet(保护模式,LowIL)和Intranet(非保护模式,MediumIL)站点之间导航IE实例,Internet Explorer必须在新进程中处理导航。在Vista上的IE7中,这非常明显 - 一个新的浏览器窗口会自动打开。在IE8中,随着Loosely-Coupled IE(LCIE)的推出,我们可以更巧妙地处理这个问题。

您可以在此处找到更多信息:http://blogs.msdn.com/b/ieinternals/archive/2011/08/03/internet-explorer-automation-protected-mode-lcie-default-integrity-level-medium.aspx