繁体   English   中英

无法使用量角器测试顺序执行JavaScript

[英]Not sequential execution of JavaScript with Protractor tests

每当我尝试运行使用JavaScript与Protractor编写的自动化测试脚本时,我都可以看到这两个实际上实际上是彼此独立地并行运行的。 例:

it("Validation of ND account", function() {

    // I logged in, and navigated to the page I need
    // And this is where is gets intresting

    console.log("\n");
    console.log("Before getting number of users");
    var numberOfUsers = element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) {
        console.log(text);
    });
    console.log("After getting number of users");

//  for (i=1, i<numberOfUsers, i++) {
//      console.log(i);
//  }

    });

我假设我以相同的顺序获取日志-之前,之后和之后,但是首先获取JS,然后获取量角器(因为加载时间更长)。 这是在控制台输出中运行此脚本的结果:

    Started

    Before getting number of users
    After getting number of users
    161

话虽如此,我的问题是,如果我想打开一个页面,获取一个元素文本,然后对其执行一些操作(运行被注释掉的FOR循环),它将不允许这样做,因为它将返回一个尚未加载页面之前尚未解决的承诺。 更确切地说,它的工作是立即开始打开页面,在页面加载之前,它将运行该循环,这取决于页面中的元素。 循环失败,因为该元素尚未出现,并且程序仍然没有其text属性。 所以这是一个问题:是否可以严格遵守脚本序列(不让JS在完成量角器命令执行之前让JS运行在量角器命令之后编写的脚本)而没有JS超时或等待功能?

您需要了解Promises并使用回调使它按顺序工作。

对于这种特殊情况,您不能等待numberOfUsers继续进行测试,而必须在回调函数中继续进行操作:

console.log("\n");
console.log("Before getting number of users");
element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) {
    console.log(text);
    // continue working here with "text"
    console.log("After getting number of users");
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM