我们可以使用哪些方法来等待加载 angular 站点以便使用量角器对其进行测试?
What are the methods we can use to wait for an angular site to be loaded in order to test it with protractor?
我们可以使用什么方法来等待 Angular 站点加载,以便用量角器对其进行测试,以避免 jasmine : A Jasmine spec timed out. Resetting the WebDriver Control Flow
引起的错误?
我能够登录并转到主页,测试已通过,但从第二次测试开始,我遇到了茉莉花问题。
您可以使用量角器的浏览器对象等待angular。
加载页面后立即添加以下内容:
browser.waitForAngular();
这个错误意味着你的测试花费了太多时间并且超过了default Jasmine spec timeout interval,默认情况下是 30 秒(看起来你已经将超时配置为为 60 秒)。它可以在量角器配置中的 jasmineNodeOpts
对象中进行配置:
jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis},
解决方案通常是特定于用例的,通常表明测试代码中存在错误。为了完全理解发生了什么,我们需要查看代码本身。
在您的特定情况下,对于初学者,您应该尝试将 "ignore synchronization" 和 browser.get()
部分移动到 beforeEach
中。此外,由于您要关闭同步,因此在与元素交互之前,您需要 wait 使该元素出现在页面上:
describe("my app", function () {
beforeEach(function () {
browser.ignoreSynchronization = true;
browser.get("...");
});
it("should make the login test", function () {
// ...
var EC = protractor.ExpectedConditions;
var username = element(by.model("credentials.username"));
browser.wait(EC.presenceOf(username), 10000);
username.sendKeys("RET02");
// ...
});
});
而且,我不确定您是否真的需要关闭同步,因为这是您正在使用的 AngularJS 页面。
你能等一个url吗?
假设当您单击登录按钮时,您的页面被重定向到另一个 url。所以你可以等待预期的url。示例:
browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
// Dashboard is the loaded url after login (in this example)
return /Dashboard/.test(url);
});
}, 60000);
此代码等待页面 browser.baseUrl/Dashboard
加载 60 秒
我已通过将此功能添加到我的配置文件中来解决此问题:
onPrepare: function() {
return browser.getProcessedConfig().then(function(config) {
var browserName = config.capabilities.browserName;
browser.manage().timeouts().setScriptTimeout(60000);
});
});
我们可以使用什么方法来等待 Angular 站点加载,以便用量角器对其进行测试,以避免 jasmine : A Jasmine spec timed out. Resetting the WebDriver Control Flow
引起的错误?
我能够登录并转到主页,测试已通过,但从第二次测试开始,我遇到了茉莉花问题。
您可以使用量角器的浏览器对象等待angular。
加载页面后立即添加以下内容:
browser.waitForAngular();
这个错误意味着你的测试花费了太多时间并且超过了default Jasmine spec timeout interval,默认情况下是 30 秒(看起来你已经将超时配置为为 60 秒)。它可以在量角器配置中的 jasmineNodeOpts
对象中进行配置:
jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis},
解决方案通常是特定于用例的,通常表明测试代码中存在错误。为了完全理解发生了什么,我们需要查看代码本身。
在您的特定情况下,对于初学者,您应该尝试将 "ignore synchronization" 和 browser.get()
部分移动到 beforeEach
中。此外,由于您要关闭同步,因此在与元素交互之前,您需要 wait 使该元素出现在页面上:
describe("my app", function () {
beforeEach(function () {
browser.ignoreSynchronization = true;
browser.get("...");
});
it("should make the login test", function () {
// ...
var EC = protractor.ExpectedConditions;
var username = element(by.model("credentials.username"));
browser.wait(EC.presenceOf(username), 10000);
username.sendKeys("RET02");
// ...
});
});
而且,我不确定您是否真的需要关闭同步,因为这是您正在使用的 AngularJS 页面。
你能等一个url吗? 假设当您单击登录按钮时,您的页面被重定向到另一个 url。所以你可以等待预期的url。示例:
browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
// Dashboard is the loaded url after login (in this example)
return /Dashboard/.test(url);
});
}, 60000);
此代码等待页面 browser.baseUrl/Dashboard
加载 60 秒
我已通过将此功能添加到我的配置文件中来解决此问题:
onPrepare: function() {
return browser.getProcessedConfig().then(function(config) {
var browserName = config.capabilities.browserName;
browser.manage().timeouts().setScriptTimeout(60000);
});
});