Protractor 等待完成页面加载在量角器中无法按预期工作
我正在编写一个登录到非角度应用程序的测试Protractor 等待完成页面加载在量角器中无法按预期工作,protractor,Protractor,我正在编写一个登录到非角度应用程序的测试 describe('login Test for App', function () { beforeEach(function () { browser.ignoreSynchronization=true; browser.get(loginPageURL,2000); }); it('It should Login a User', function () { eleme
describe('login Test for App', function () {
beforeEach(function () {
browser.ignoreSynchronization=true;
browser.get(loginPageURL,2000);
});
it('It should Login a User', function () {
element(by.id('username')).sendKeys(constants.userName);
element(by.id('password')).sendKeys(constants.password);
element(by.id('Login')).click().then(function () {
// Waiting to open modal
browser.wait(function () {
return browser.getCurrentUrl().then(function (url) {
return url==dashboardUrl;
});
});
});
});
});
登录后,我想检查currentUrl。但在单击登录按钮后,它会等待仪表板url出现。
但当登录按钮点击后,它会转到不同的url,然后它还会等待仪表板url无限。
我想在登录事件后检查当前url,若它不是仪表板url,那个么它应该失败,并且不要运行下一个测试套件案例,因为登录测试失败了
像-
当点击登录按钮时
2.然后检查当前url,如果它不是仪表板url,则测试应该失败,并且不继续任何测试用例。等待页面url加载以了解页面是否已加载不是最佳做法,因为可能存在重定向或其他问题 最佳做法是在下一页(登录后)等待特定元素。下面是经过重构的代码,使用自定义的wait()函数,该函数将在继续检索当前url之前等待元素出现:
describe('login Test for App', function () {
browser.ignoreSynchronization = true;
it('should load the log-in page', function(done) {
browser.driver.get(loginPageURL).then(function() {
browser.driver.sleep(2000);
wait('#username', 10000);
done();
});
});
it('It should Login a User', function (done) {
element(by.id('username')).sendKeys(constants.userName);
element(by.id('password')).sendKeys(constants.password);
element(by.id('Login')).click().then(function () {
// Waiting to open modal
wait('#element_on_the_next_page', 10000);
browser.getCurrentUrl().then(function (url) {
// do anything with the url
done();
});
});
});
function wait(selector, timeout) {
browser.driver.wait(function() {
return browser.driver.isElementPresent(by.css(selector)).then(function(present) {
return present;
});
}, timeout);
browser.driver.wait(function() {
return browser.driver.findElement(by.css(selector)).isDisplayed().then(function(displayed) {
return displayed;
});
}, timeout).then(function() {
return;
});
}
});
希望这有帮助 等待页面url加载以了解页面是否已加载不是最佳做法,因为可能存在重定向或其他问题 最佳做法是在下一页(登录后)等待特定元素。下面是经过重构的代码,使用自定义的wait()函数,该函数将在继续检索当前url之前等待元素出现:
describe('login Test for App', function () {
browser.ignoreSynchronization = true;
it('should load the log-in page', function(done) {
browser.driver.get(loginPageURL).then(function() {
browser.driver.sleep(2000);
wait('#username', 10000);
done();
});
});
it('It should Login a User', function (done) {
element(by.id('username')).sendKeys(constants.userName);
element(by.id('password')).sendKeys(constants.password);
element(by.id('Login')).click().then(function () {
// Waiting to open modal
wait('#element_on_the_next_page', 10000);
browser.getCurrentUrl().then(function (url) {
// do anything with the url
done();
});
});
});
function wait(selector, timeout) {
browser.driver.wait(function() {
return browser.driver.isElementPresent(by.css(selector)).then(function(present) {
return present;
});
}, timeout);
browser.driver.wait(function() {
return browser.driver.findElement(by.css(selector)).isDisplayed().then(function(displayed) {
return displayed;
});
}, timeout).then(function() {
return;
});
}
});
希望这有帮助 足够接近,但超时后,如果该元素不显示或不存在,我不想继续测试套件。因为我的登录测试失败了。怎么做?现在,当我的登录测试失败时,它也会继续进行进一步的测试套件,我已经在conf.js的spec属性中定义了这些测试套件。如果您希望的话,请在这里查看这个答案,以在初始失败后使套件失败:足够接近,但超时后,如果该元素不显示或不存在,我不想继续进行进一步的测试套件。因为我的登录测试失败了。怎么做?现在,当我的登录测试失败时,它还将继续进行进一步的测试套件,我在conf.js的spec属性中定义了这些测试套件。如果您希望这样做,请在这里查看此答案,以在初始失败后使套件失败: