在什么情况下,我需要用量角器ExpectedConditions等待一个元素

问题描述 投票:0回答:1

我是新来用量角器工作,我是在你需要使用量角器时(下面的例子)使用ExpectedConditions什么情况下不知道。我认为,量角器自动确定何时AngularJS页面完全加载。

let EC = ExpectedConditions;
let condition = EC.presenceOf(element(by.id("something"))); 
browser.wait(condition, 10000);

谢谢,埃里克

protractor
1个回答
2
投票

从我的经验用量角器工作,使用ExpectedConditions取决于你的自动化页面的行为。它主要用于由于如果病情没有在规定时间内遵守失败。

这些条件也将返回你可以处理自己的喜好的承诺。

我给你几个方案,所以你可以明白的地方使用它们。

  1. alertIsPresent():这种情况会等到出现警告。

例如: - 点击一个按钮后,会出现一个警告外观;然而,有一个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秒钟,看是否警报存在,否则就会抛出一个错误。

  1. invisibilityOf():这一条件将等待,直到不被显示在指定的元素。

例如: - 有出现针对在网页触发的每一个动作装载机。为此,我们要等到这个加载器会消失,所以我们可以用自动化进程继续下去。按业务需求,这部分代码不应该需要更长的时间超过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. elementToBeClickable():这种情况会等到指定的元素,可以点击。

例如: - 登录表单按钮默认是关闭的,所以它不能被点击,除非我们完成了用户名和密码文本框。要启用的按钮填充文本框具有快速的动画,我们想给它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秒的元素是可点击,如果是,它会与下一行PROCEDE并单击它。在另一方面,如果没有,错误将被抛出。

  1. presenceOf():在这种情况下,该条件将检查元件存在于DOM(文档对象模型),但它不会检查元件是可见或不可见。

例如: - 在用含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找到。

© www.soinside.com 2019 - 2024. All rights reserved.