【发布时间】:2020-07-03 05:33:24
【问题描述】:
我正在检查错误的登录消息。我正在使用带有 browser.wait 的异步规范来等待元素出现在 DOM 中。 但它没有按预期工作。 如果元素不存在,我希望它等待给定的超时。 但是规范很快失败,并显示元素不存在的消息。 这没有道理。如果它真的不存在,它应该等待它并在超时后失败。
it("reports wrong login", async () => {
browser.waitForAngularEnabled(false);
await username.clear(); //clear as it may be filled already with something
await password.clear(); //clear as it may be filled already with something
await username.sendKeys("wrongemail");
await password.sendKeys("wrongpass");
await submitButton.click();
let errorTextElement = element(by.css(".has-remote-error > small"));
let until = protractor.ExpectedConditions;
browser.wait(until.presenceOf(errorTextElement), 5000, "error message element not found in DOM");
let errorText = await errorTextElement.getText();
//CHECKS
expect(errorText).toEqual("Your email address or password is incorrect!");
})
我厌倦了我发现的几种方法。这似乎是正确的方法。为什么这不起作用?
这是失败的测试消息:
Failed: No element found using locator: By(css selector, .has-remote-error > small)
usign protractor version 5.4.3 direct connect chrome 80.0.3987.149 on Mac OS X
其实这里是配置
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/docs/referenceConf.js
const HtmlReporter = require('protractor-beautiful-reporter');
exports.config = {
allScriptsTimeout: 30000,
specs: [
'./e2eTests/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
SELENIUM_PROMISE_MANAGER: false,
// Options to be passed to Jasmine.
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
useAllAngular2AppRoots: true,
beforeLaunch: function() {
},
onPrepare: function() {
require('ts-node').register({ project: 'e2eTests/tsconfig.e2e.json' });
// Add a screenshot reporter:
jasmine.getEnv().addReporter(new HtmlReporter({
preserveDirectory: false,
takeScreenShotsOnlyForFailedSpecs: true,
screenshotsSubfolder: 'images',
jsonsSubfolder: 'jsons',
baseDirectory: 'e2eTests/reports',
clientDefaults:{
useAjax:false,
totalDurationFormat:'hms',
showTotalDurationIn: 'header'
}
}).getJasmine2Reporter());
}
};
【问题讨论】:
-
你能添加这个错误信息的 html 吗?从错误可以理解定位器是错误的
-
你的意思是登录页面的html?它是动态角度应用程序。在测试运行时它不存在。关键是等待它是否出现在 DOM 中,如果它没有出现则测试失败,但它必须等待它。要么它不等待,要么它确实可以在 DOM 中找到它,但是它报告一个元素不存在的错误......这两种方式都没有意义
标签: angular selenium selenium-webdriver protractor