我是 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/