Protractor 在什么情况下,我需要使用量角器ExpectedConditions来等待元素

Protractor 在什么情况下,我需要使用量角器ExpectedConditions来等待元素,protractor,Protractor,我不熟悉量角器,我想知道在什么情况下使用量角器时需要使用ExpectedConditions(下面的示例)。我认为量角器会自动确定AngularJS页面何时被完全加载 let EC = ExpectedConditions; let condition = EC.presenceOf(element(by.id("something"))); browser.wait(condition, 10000); 谢谢,Eric根据我使用量角器的经验,预期条件的使用取决于正在自动化的页面的行为。如果

我不熟悉量角器,我想知道在什么情况下使用量角器时需要使用
ExpectedConditions
(下面的示例)。我认为量角器会自动确定AngularJS页面何时被完全加载

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

谢谢,Eric

根据我使用量角器的经验,预期条件的使用取决于正在自动化的页面的行为。如果条件在指定的时间内不符合要求,则通常会因失败而使用此选项

这些条件也会回报一个你可以随心所欲处理的承诺

我将为您提供一些场景,以便您了解在何处使用它们

  • 警报显示():此情况将等待警报出现 e、 g:点击某个按钮后,会出现预警画面;然而,有一个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秒钟,以查看警报是否存在,否则将抛出错误

  • invisibilityOf():此条件将等待指定的元素不显示 e、 g:页面中触发的每个动作都会出现一个加载程序。为此,我们希望等到这个加载程序消失,这样我们就可以继续自动化过程。根据业务需求,此加载程序的运行时间不应超过10秒

    此加载程序锁定整个页面,因此其他元素在启动时不可交互

    在点击一个按钮后,我们会给加载程序10秒的宽限期让其消失,否则该条件将抛出一个错误

  • elementtobelickable():此条件将等待单击指定的元素
  • e、 g:登录表单的按钮在默认情况下是禁用的,因此除非我们填写用户名和密码文本字段,否则无法单击该按钮。填充文本字段后启用的按钮具有快速动画,无论哪种方式,我们都希望给它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秒,以便元素可以单击,如果可以,它将继续下一行并单击它。另一方面,如果没有,将抛出一个错误

  • presenceOf():在这种情况下,条件将检查元素是否存在于DOM(文档对象模型)中,但不会检查元素是否可见
  • e、 g:页面上有一个单选按钮组,包含三种口味:巧克力、香草和草莓。根据您的选择,您将看到不同的问题。开发人员提到,问题随时都在页面中,但由于此时选择了单选按钮,因此问题被隐藏。在这种情况下,我们只想检查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:更多信息可在中找到

    根据我使用量角器的经验,ExpectedConditions的使用取决于正在自动化的页面的行为。如果条件在指定的时间内不符合要求,则通常会因失败而使用此选项

    这些条件也会回报一个你可以随心所欲处理的承诺

    我将为您提供一些场景,以便您了解在何处使用它们

  • 警报显示():此情况将等待警报出现 e、 g:点击某个按钮后,会出现预警画面;然而,有一个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秒钟,以查看警报是否存在,否则将抛出错误

  • invisibilityOf():此条件将等待指定的元素不显示 e、 g:页面中触发的每个动作都会出现一个加载程序。为此,我们希望等到这个加载程序消失,这样我们就可以继续自动化过程。根据业务需求,此加载程序的运行时间不应超过10秒

    此加载程序锁定整个页面,因此其他元素在启动时不可交互

    在点击一个按钮后,我们会给加载程序10秒的宽限期让其消失,否则该条件将抛出一个错误

  • elementtobelickable():此条件将等待单击指定的元素
  • e、 g:登录表单的按钮在默认情况下是禁用的,因此除非我们填写用户名和密码文本字段,否则无法单击该按钮。填充文本字段后启用的按钮具有快速动画,无论哪种方式,我们都希望给它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秒,以便元素可以单击,如果可以,它将继续下一行并单击它。另一方面,如果没有,将抛出一个错误

  • presenceOf()