javascript - 我怎样才能等待一个条件?

标签 javascript angularjs selenium-webdriver protractor automated-tests

我是 Protractor 的新手,我正在尝试实现端到端测试。 我不知道这是否是正确的方法,但是...... 我要测试的页面不是基于完整 Angular 页面,所以...我遇到了一些麻烦。

在我的第一个规范中,我有:

describe('should open contact page', function() {
var ptor = protractor.getInstance();

beforeEach(function(){

   var Login = require('./util/Login');
   new Login(ptor);
});

我已经创建了这个登录类,但是登录后我想打开联系人页面,但是 Protractor 会在页面完全加载之前立即尝试查找元素。

我试过使用:

browser.driver.wait(function() {

    expect(browser.findElement(by.xpath("//a[@href='#/contacts']")).isDisplayed());
    ptor.findElement(by.xpath("//a[@href='#/contacts']")).click();

});

但它不起作用...它总是尝试在页面加载之前找到元素。 我也试过这个:

browser.driver.wait(function() {
    expect(ptor.isElementPresent(by.xpath("//a[@href='#/contacts']")));          
    ptor.findElement(by.xpath("//a[@href='#/contacts']")).click();
});

我可以使用 browser.sleep(); 来做到这一点,但我认为这不是一个好的选择。任何想法?在我的登录类(class)中,我有:

ptor.ignoreSynchronization = true;

如何在 Protractor 尝试点击它之前等待这个@href='#/contacts

最佳答案

Protractor 1.7.0 还引入了一项新功能:Expected Conditions .

有几个预定义的条件可以显式等待。如果您想等待元素出现:

var EC = protractor.ExpectedConditions;

var e = element(by.id('xyz'));
browser.wait(EC.presenceOf(e), 10000);

expect(e.isPresent()).toBeTruthy();

另见:

关于javascript - 我怎样才能等待一个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22072327/

相关文章:

javascript - 结合数组和字典属性的数据类型

javascript - 如何显示自定义html标签?

javascript - Angularjs 错误日志

javascript - 如何在 Onsen-UI 中使用自定义图像/图标

java - 在表中搜索给定文本,如果存在则应显示通过

javascript - 移动浏览器上的全视口(viewport)固定位置 Canvas

javascript - Laggy 淡入淡出背景

javascript - PUBNUB:在 "PUBNUB.subscribe"上,window.print() 不起作用

java - 在 Selenium 中处理 TAB

Webdriver - java - 如何在执行操作后释放键