我已经使用/学习量角器一个多月了。
我知道量角器文档说,它等待角度调用完成(http://www.protractortest.org/#/),它将确保所有步骤同步执行等。
但我不这么认为。或者至少,我在我的脚本中没有发现时间量角器提前运行,例如,如果我点击一个链接,获得当前的url,然后验证url。
大多数时候,URL值会过时,即点击链接后没有执行。下面是我的页面对象代码示例和相应的测试。
请建议如何确保按顺序执行所有测试步骤。
Page Object
this.getSPageLink(){
return element(by.xpath("//a[@title='S']"));
};
this.getLPageLink(){
return element(by.xpath("//a[@title='L']"));
};
this.goToSPage = function() {
(this.getSPageLink()).click();
*//ERROR here, sometimes second click (below) doesn't wait for first
click to complete, and complains that link for 2 click (below) is
not found*
(this.getSLPageLink()).click();
return browser.currentURL();
*//ERROR HERE url line (e) is sometimes executed before*
}
Test Class
it('::test SL page', function() {
pageObject.goToSpage();
var currentURL=browser.getCurrentURL();
expect(currentURL).toContain("SLink");
*//ERROR HERE value in this variable "currentURL" is most of the
times Stale*
});
it('::test SL2 page', function() {
pageObject.goToLpage();
var currentURL=browser.getCurrentURL();
expect(currentURL).toContain("Link");
console.log("this line is always executed first"));
//ERROR here , this print line is always executed first
});
这相当令人困惑,而且Protractor文档对此并不十分清楚,但只有在使用get
或refresh
命令时,Protractor才会等待页面同步。在这种情况下,您使用click
命令加载新页面,这样Protractor就不会在继续之前等待新页面同步。请参阅Protractor开发人员对此行为的推理。
因此,在您的情况下,您需要在测试或页面对象中处理这个问题。无论哪种情况,您都可以在单击后使用类似以下内容:
browser.wait(function () {
return browser.driver.getCurrentUrl().then(function (url) {
return /SLink/.test(url);
});
}, 10000);
这将尽可能频繁地轮询当前URL(在实践中大约每500ms轮询一次),持续10秒。当它在当前URL中找到“Slink”字符串时,它将继续执行下一个命令。
问题内容: 问题描述: 我们最近在量角器端到端测试中打开应用程序中的页面之一时遇到了这个臭名昭著的错误: 失败:超时,等待异步Angular任务在50秒后完成。这可能是因为当前页面不是Angular应用程序。 这是在我们的一项测试中的一次通话中发生的: 而且,对我们的案例来说很奇怪的是, 该错误未在Angular Web应用程序的任何其他页面上引发 -Protractor与Angular同步而没有
一旦遇到这样的问题,这里还有更多内容,然后发现了 一个适当恶劣的解决方法。 这篇文章没有列在索引中,但是为满足你的好奇心而保留了下来。
配置: 规范1: 规范2: 进程已完成,退出代码为%1 在我的实际测试中,当我的规范与我提供的相似时,我也有同样的问题。当我看到由于某种原因真正发生了什么时,第二个规范的get(url)方法在第一个规范完成之前就开始执行了。我想我错过了一些核心和重要的东西,谁能给我指指点点吗?)
我的量角器。conf.js(相关部分) 如果我在正常模式下运行量角器,所有测试都通过了。以及如果我用map.click()替换这段代码。 编辑:我以前没有添加错误,因为我认为它们在我的情况下没有用。但他们在这里,因为有人认为他们是相关的。 失败: 1) 量角器演示应用程序位置排序应在距地图中心不同的距离上创建2个位置消息:预期0为2。堆栈:错误:对象的预期失败。它(/home/piliponful
问题内容: 我的任务是按以下顺序创建线程:如果A开始->启动B和C,如果B开始->启动D。并以相反的顺序销毁它们如果D然后B。如果B和C然后A。它。我设法做到了,但我想还有更好的方法。你有什么建议吗? 在您发表评论后,我更改了代码,这非常简单。但是现在看起来“愚蠢”。我想更改if语句和实现的硬性,有什么建议吗?寻求建议,我正在与您一起学习。 这是我的新代码: 问题答案: 您的代码中存在一些缺陷,这
我试图遵循量角器官方网站上的量角器教程,但我甚至无法完成步骤0。 我在用量角器 之后,我一直在遵循教程的第0步。我有配置。js文件和test-spec.js文件如下: 配置js公司 测试规范js 当我运行protector
运行protactor时,出现以下错误:
问题内容: 我正在测试AngularJS应用程序,并且对量角器非常新。每次我打开浏览器时,它都会打开,然后等待超时,然后在cmd上引发以下错误。 我尝试增加超时限制,但始终会收到此错误。我也尝试过使用所有这些: 该页面正确加载,并且如果我使用Eclipse和Selenium与按钮对象进行交互,则可以正常工作。 只有量角器出现同步问题。请帮忙。 问题答案: 量角器超时的可能原因: 您的网页未以预期的