【发布时间】:2016-10-06 16:29:00
【问题描述】:
我是量角器的新手,所以请多多包涵。
我多次看到这个问题被问到,但没有一个建议的解决方案适合我。我正在测试的应用程序从非角度登录页面开始。我设置 browser.ignoreSynchronization = true,登录,将其设置回 false,然后重新加载页面。然后我尝试与结果页面上的元素进行交互。第一个元素没有问题,但是尝试查找第二个元素会引发类型错误并显示消息
“失败:无法分配给只读属性'stack'的超时等待量角器在11秒后与页面同步。请参阅https://github.com/angular/protractor/blob/master/docs/faq.md 在等待带有定位器的元素时 - 定位器:[有效定位器]"
我可以通过将 ignoreSychronization 设置为 true 并使用 sleeps 来使其工作,但这不会破坏使用量角器的全部目的吗?!我可以使用 java+selenium,我已经精通了。
我确定页面正在加载,并且没有未完成的 http、超时或其他调用。可以肯定的是,我将超时设置为 2 分钟,结果相同。
我的测试看起来像这样:
describe('this does not work', function() {
beforeEach(function() {
// log in on non-angular page
// ignoreSynchronization because this isn't an angular page
browser.ignoreSynchronization = true;
var d = browser.driver;
d.get(g.url);
var username_field = d.findElement([valid locator]);
username_field.sendKeys(username);
var next_button = d.findElement([valid locator]);
next_button.click();
var password_field = d.findElement([valid locator]);
password_field.sendKeys(password);
var login_button = d.findElement([valid locator]);
login_button.click();
// done with non-angular page
browser.ignoreSynchronization = false;
browser.get(g.url);
});
it('does not work', function() {
// if you comment out this line, the next will execute successfully
// this succeeds, so page is loaded
expect(element([valid locator]).getText()).toBe('some string');
// otherwise, the exception is thrown trying to get this element
element([valid locator]).click();
element([valid locator]).click();
});
});
欢迎任何帮助/指针/建议。
编辑: 我应该包含我的 conf.js:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['./specs/**/broken_spec.js'],
useAllAngular2AppRoots: true
}
【问题讨论】:
-
快速检查 - 在
browser.get(g.url)之后添加browser.waitForAngular()有什么不同吗?谢谢。 -
@alecxe - 不,browser.waitForAngular() 是我尝试过的方法之一。没有区别,这实际上并不让我感到惊讶。找到了我要查找的第一个元素,因此我知道页面已加载。但是感谢您的尝试!
标签: angularjs protractor