编程语言
首页 > 编程语言> > javascript – 在端到端测试中使用跨平台键盘快捷键

javascript – 在端到端测试中使用跨平台键盘快捷键

作者:互联网

问题:

在我们相当大的测试代码库中,我们使用不同的键盘快捷键.例如,要复制所选文本,我们使用CTRL / COMMAND C,粘贴CTRL / COMMAND v,打开新选项卡CTRL / COMMAND T等.

为了使测试在多个平台上运行,我们希望根据目标浏览器运行的平台自动选择CTRL vs COMMAND.要确定目标平台,我们目前正在使用以下帮助函数,该函数使用navigator.appVersion:

this.getControlKey = function () {
    return browser.executeScript("return navigator.appVersion.indexOf('Mac');").then(function (isMac) {
        return isMac ? protractor.Key.COMMAND : protractor.Key.CONTROL;
    });
};

这种方法的问题是getControlKey()返回一个promise,每次我们使用它时,我们必须明确地解决promise:

helpers.getControlKey().then(function (controlKey) {
    elm.sendKeys(protractor.Key.chord(controlKey, "c"));
});

问题:

>是否可以避免嵌套并简化getControlKey()的使用?理想情况下,我希望它的工作简单:

elm.sendKeys(protractor.Key.chord(helpers.getControlKey(), "c"));

>使用navigator.appVersion是确定目标平台的最佳方法,还有更好的方法吗?

解决方法:

对于这两种情况,我最好回答您的第一个问题 –

>如果多个测试人员在自己的机器中运行脚本,则可以将辅助方法置于onPrepare()函数中,将该值分配给常量全局变量,该变量可用于所有测试.
>如果所有测试都在分布式平台上运行,其中所有测试都被随机分配给不同的机器,那么在这种情况下编写辅助方法将有用的值分配给在beforeAll()函数中为该测试的常量局部变量.

转到第二个问题,还有另一种方法,我们可以使用量角器的getCapabilities()方法获得正在执行测试规范的平台.

获取平台类型的代码 –

//Below code can be placed either in `onPrepare()` function or `beforeAll()` function depending the need.
//If the below code is placed in the `beforeAll()` function then i guess there won't be any need for a global variable.

browser.controlKey = protractor.Key.CONTROL; //browser.controlKey is a global variable and can be accessed anywhere in the test specs
browser.getCapabilities().then(function(capabilities){
    if(capabilities.caps_.platform === "MAC")
        browser.controlKey = protractor.Key.COMMAND;
});

用法:

elm.sendKeys(protractor.Key.chord(browser.controlKey, "c")); //if its stored as global variable

希望能帮助到你.

标签:javascript,selenium,selenium-webdriver,protractor,end-to-end
来源: https://codeday.me/bug/20190926/1819628.html