我用非角度登录页面编写了针对角度应用的量角器测试。所以我用browser.waitForAngularEnabled(false);
,然后添加带有一系列it块的describe块以测试应用程序。
每当我运行第一个程序块时,它总是失败。然后,我删除了主体并运行。在这里它也失败,并带有一些误导性错误- NoSuchElementError: No element found using locator: By(css selector, *[id="Username"])
此错误实际上与登录功能有关。但是到那时它已经成功通过了。这个问题背后的原因是什么?
我的代码结构是
describe("Test Cases in first feature ", () => {
//login via non angular application
login.SignIn(settings.usercredentials.LocalUser.userName, settings.usercredentials.LocalUser.password);
it("dummy tc", () => {
});
it("New Mission Creation", () => {
main_dashboard_page.newItem("mission");
});
答案 0 :(得分:1)
不包含在it块中的代码将不会按照您期望的顺序执行,并且该代码生成的任何问题也将不会像您通常期望的那样处理。您的登录功能代码将在该页面上的任何其他代码之前运行,这很可能是导致问题的原因。对于这样的登录功能,建议将其包含在beforeAll或beforeEach(或它自己的)中。
我有一个具有非角度登录的类似应用程序,并且正在以以下方式(使用async / await语法)对其进行处理
beforeAll(async function () {
//before any tests run we want to launch the URL and log in
await browser.waitForAngularEnabled(false);
await loginPO.loginToApplication(browser.params.login.username, browser.params.login.password, browser.params.loginSite.url);
//I create some additional logic to ensure login was successful before re-enabling angular wait
await browser.waitForAngularEnabled(true);
});
非异步/等待方式
beforeAll(function () {
//before any tests run we want to launch the URL and log in
browser.waitForAngularEnabled(false);
loginPO.loginToApplication(browser.params.login.username, browser.params.login.password, browser.params.loginSite.url);
//I create some additional logic to ensure login was successful before re-enabling angular wait
browser.waitForAngularEnabled(true);
});
更新后的答案:
it('login before tests execute', () => {
browser.waitForAngularEnabled(false);
loginPO.loginToApplication(browser.params.login.username, browser.params.login.password, browser.params.loginSite.url);
//You can create additional logic to ensure login successful
browser.waitForAngularEnabled(true);
})