我刚开始使用量角器,我想知道在什么情况下使用量角器时需要使用ExpectedConditions
(下面的示例)。我认为量角器会自动确定AngularJS页面何时完全加载。
let EC = ExpectedConditions;
let condition = EC.presenceOf(element(by.id("something")));
browser.wait(condition, 10000);
谢谢埃里克
答案 0 :(得分:2)
根据我与量角器的合作经验, ExpectedConditions 的使用取决于您要自动化的页面的行为。如果条件在指定时间内不符合要求,通常会因为失败而使用。
这些条件还将返回一个您可以按照自己的喜好处理的承诺。
我将为您提供一些方案,以便您了解在何处使用它们。
例如:单击按钮后,将出现警报外观;但是,有一个API调用使弹出窗口花费的时间更长,并且动画效果也较小,因此我们想等待几秒钟,而不要超过此时间。
// will click on a button
element(by.id('button')).click();
// will wait for the condition
let EC = ExpectedConditions;
browser.wait(EC.alertIsPresent(), 5000);
下面的代码在单击按钮后将等待5秒钟,以查看警报是否存在,否则将引发错误。
例如:对于页面中触发的每个单个操作,都会出现一个加载器。为此,我们要等到该加载程序消失后才能继续进行自动化过程。根据业务需求,此加载程序的时间不应超过10秒。
此加载器锁定了整个页面,因此其他元素在启动时不可交互。
// trigger random action on page so loader appears
element(by.id('button2')).click();
// will wait for the condition
let EC = ExpectedConditions;
browser.wait(EC.invisibilityOf(element(by.id('loader'))), 10000);
单击按钮后,我们将给予10秒宽限期,以使装载程序消失,否则情况将引发错误。
例如:登录表单的按钮默认情况下处于禁用状态,因此除非我们填写用户名和密码文本字段,否则无法单击该按钮。填充文本字段后启用的按钮具有快速的动画效果,无论哪种方式,我们都希望在1秒钟内完成它,并检查是否能够单击它。
// complete both textfields required for the button to be enabled
element(by.id('username')).sendKeys('User1234');
element(by.id('password')).sendKeys('Protractor');
// will wait for the condition and then will click the button
let EC = ExpectedConditions;
browser.wait(EC.elementToBeClickable(element(by.id('loginButton'))), 1000);
element(by.id('loginButton')).click();
在完成两个文本字段之后,条件将等待1秒钟,以使元素可单击,如果可以,则继续下一行并单击它。另一方面,如果不这样做,将引发错误。
例如:在带有单选按钮组的页面上,该组包含3种口味:巧克力,香草和草莓。根据您选择的内容,将显示不同的问题。开发人员提到问题始终在页面中,但是由于当前选择了哪个单选按钮,因此问题被隐藏了。在这种情况下,我们只想检查 DOM 中是否存在所有问题,是否通过选择单选按钮来显示它们。
// check all questions directly, without selecting any radio buttons
let EC = ExpectedConditions;
browser.wait(EC.presenceOf(element(by.id('question-1'))), 1000);
browser.wait(EC.presenceOf(element(by.id('question-2'))), 1000);
browser.wait(EC.presenceOf(element(by.id('question-3'))), 1000);
这里的时间是无关紧要的;尽管如此,使用此条件,我们将能够检查问题,即使它们是隐藏的,也存在于 DOM 中。如果缺少一个错误,则会立即中断测试。
这些是我过去不得不处理的几个例子。条件的使用是视情况而定,在您要使用现有条件时,大多数情况下它们很有用,因为它们可以节省您自己建立条件的时间。
PD:更多信息可以在Protractor API中找到。