我对Protractor相当新。 我正在尝试自动化一个场景,我点击一个按钮,它在新标签页面中打开一个页面,然后我们需要在新页面中填写表单并提交。
问题:当我点击按钮打开新页面时。我的测试不会等待加载新页面并说测试完成和成功消息。
我使用该按钮的简单点击事件来点击按钮。
元素(by.id( “newPlan的”))。单击()
我错过了什么吗?我是否需要做一些事情以便我的测试等待新页面加载然后我可以执行一些功能?
答案 0 :(得分:25)
您需要等到页面打开后才能使用回调。从这个意义上尝试一下:
element(by.id("newPlan")).click().then(function () {
browser.getAllWindowHandles().then(function (handles) {
newWindowHandle = handles[1]; // this is your new window
browser.switchTo().window(newWindowHandle).then(function () {
// fill in the form here
expect(browser.getCurrentUrl()).toMatch(/\/url/);
});
});
});
答案 1 :(得分:3)
这是适用于我的解决方案,但我添加了一个browser.sleep(500),以避免上述错误(UnknownError:未知错误:'name'必须是非空字符串)。 问题是新手柄尚未推出。 只需在点击后给它片刻,打开新标签并让它的处理程序可用。 是的,它增加了一个丑陋的睡眠,但它是一个短暂的......
element(by.id("newPlan")).click().then(function () {
browser.sleep(500);
browser.getAllWindowHandles().then(function (handles) {
newWindowHandle = handles[1]; // this is your new window
browser.switchTo().window(newWindowHandle).then(function () {
// fill in the form here
expect(browser.getCurrentUrl()).toMatch(/\/url/);
});
});
});
答案 2 :(得分:2)
" 确保新页面也是AngularJS页面"如果我是诚实的话,对我来说没有多大意义:)
无论浏览器重定向到哪个页面/应用的类型,测试都应该有效,不应该吗?
如果您在非角度页面上访问新标签网址时遇到问题,请尝试
browser.driver.getCurrentUrl();
而不是
browser.getCurrentUrl();
答案 3 :(得分:1)
还有另一种更方便的方法。只需使用browser
对象上的函数。
element(by.id("newPlan")).click();
browser.sleep(10000);
browser.waitForAngular();
expect(browser.getCurrentUrl()).toMatch(/\/url/)
答案 4 :(得分:0)
这是不使用browser.sleep()方法的实现。
功能MySchema.find({}).batchSize(20).exec(function(err,docs)
{
console.log(docs.length)
});
是使用async和underscorejs创建的。
使用waitForNewWindow()
方法同步调用async.until()
。
getAllWindowHandles()