gpt4 book ai didi

javascript - 为什么 Protractor 会立即运行每一行代码?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:06 25 4
gpt4 key购买 nike

为什么 Protractor 会立即运行每一行代码?

所以我有一个不是用 Angular 编写的网页。我需要基于 Selenium 的自动化来实现这一目标。我已经使用 selenium webdriver-js 代码来实现它。下面的例子。登录后,您将进入包含 3 个问题的页面。每次登录时问题的顺序都是随机的。因此,您每次登录时可能永远不会以相同的顺序收到相同的问题。

问题 1) 你叫什么名字?

问题2)现在几点了?

问题 3)你为什么在这里?

每个问题的答案都是问题的最后一个词。

答案1)姓名

回答2)它

此处回答 3)

所以我想解决这个问题的一个简单方法是创建一个 if 条件语句

var foo = browser.driver.findElement(By.id('question1')).getText();
if(foo == What is your name?) {
browser.driver.findElement(By.id('answer1')).sendKeys('name');
}
else {
blah
}

等等...等等...

但我遇到的问题是 Protractor 在到达该点之前立即运行 if 语句。在下面的示例中,控制台立即打印出控制台日志“这很糟糕”,因为它立即运行 if 语句,而没有执行第一步到达页面然后进行检查。

  this.foo_test = function() {
console.log('starting foo test');
browser.driver.get('http://my-test-url.com/');
browser.sleep(3000);
browser.driver.findElement(By.id('login')).click();
browser.sleep(3000);
browser.driver.findElement(By.id('user')).sendKeys('user');
browser.driver.findElement(By.id('login_button')).click();
browser.sleep(3000);

console.log('getting variable');
var foo = browser.driver.findElement(By.id('question1')).getText();
console.log(foo);
if (foo == 'What was the name of your first pet?') {
console.log('this is cool');
}
else{
console.log('this sucks');
}
};

最佳答案

Protractor 基于 WebdriverJS 构建,它使用隐式 promise 队列编程风格。请参阅:

https://github.com/angular/protractor/blob/master/docs/control-flow.md

这意味着 Protractor 测试中的每个语句都应该被视为排队 promise ,而不是实际执行。例如,该行:

browser.driver.findElement(By.id('question1')).getText()

返回文本,但返回 promise 以返回文本。您必须将此 Promise 传递给其他需要 Promise 的 API,或者使用 .then() 提供直接处理程序。

您在 Protractor 测试中看到的 expect 调用已被修改为等待 promise 解决。所以类似:

expect(name.getText()).toEqual('Jane Doe');

实际上是对一个 Promise 进行排队,以将左侧 Promise 的结果与右侧的值进行比较。

关于javascript - 为什么 Protractor 会立即运行每一行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791179/

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