我正在编写一个登录非角度应用程序的测试。
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出现。 但是当在loginbutton点击之后,它会转到不同的url,然后它也会等待仪表板的URL无限。 我想在登录事件后检查当前URL,如果它不是仪表板URL,那么它应该失败,并且不运行下一个测试套件的情况,因为登录测试失败。
象 -
当clickOn登录按钮时。
2.然后检查当前网址,如果它不是仪表板网址,那么测试应该失败,并且不会继续进行任何测试用例。
答案 0 :(得分:1)
最佳做法是等待页面url加载以了解页面是否已加载,因为可能存在重定向或其他内容。
最佳做法是等待下一页上的特定元素(登录后)。这是您的代码重构为使用自定义 wait()函数,该函数将在继续检索当前网址之前等待元素出现:
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;
});
}
});
希望这有帮助!