gpt4 book ai didi

javascript - 使用 Protractor 测试不顺序执行 JavaScript

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:20 26 4
gpt4 key购买 nike

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

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,然后获取 Protractor (因为加载时间更长)。这是在控制台输出中运行此脚本的结果:

    Started

Before getting number of users
After getting number of users
161
话虽如此,我的问题是,如果我想打开一个页面,获取一个元素文本,然后用它执行一些操作(运行一个被注释掉的 FOR 循环),它不会让这样做,因为它在加载页面之前会返回一个 Unresolved promise 。更准确地说,它的作用是开始打开一个页面,在加载页面之前,它将运行该循环,这取决于页面中的元素。循环失败,因为该元素尚未出现,并且程序仍然没有其文本属性。那么问题来了:是否可以严格遵守脚本顺序(在 Protractor 命令执行完成之前不让JS运行 Protractor 命令之后编写的脚本)而不需要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");
});

关于javascript - 使用 Protractor 测试不顺序执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com