为什么量角器立即运行每一行代码?

所以我有一个网页不是用角度写的。我需要基于硒的自动化系统来实现。我已经使用了硒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
}


等等...等等...

但是我遇到的问题是,量角器在到达该点之前立即运行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');
      }
  };

最佳答案

量角器基于WebdriverJS构建,后者使用隐式承诺队列编程风格。看到:

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

这意味着量角器测试中的每个语句都应理解为使承诺排队,而不是实际执行。因此,例如,该行:

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


不返回文本,但返回承诺返回文本。您必须将此承诺传递给其他预期的API,或为.then()提供直接处理程序。

您在量角器测试中看到的expect调用已被修改,以等待承诺解决。所以像这样:

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


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

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

10-12 03:24