我需要使用Protractor找到elemet“username”。 我用过
browser.waitForAngularEnabled(false);
由于登录页面不是Angular。
我的脚本就像这样简单:
describe('slowchat', function() {
it('start test', function() {
browser.waitForAngularEnabled(false);
browser.get('https://www.test.no/eai/bankid20');
element(by.css('[value="Logg inn"]')).click();
browser.waitForAngularEnabled(true);
});
});
然而我收到错误:
Failed: No element found using locator: By(css selector, [value="Logg inn"])
请参阅我想找到的地方的附件。
知道为什么无法找到按钮吗?
答案 0 :(得分:0)
现在我看到圆圈输入了username
,但是你问关于提交表格的按钮,顺便说一句你可以用旗帜关闭角度
//entering non-angular site
browser.ignoreSynchronization=true;
//Some code
element(by.css('button[onclick="mySubmit()"])).click();
//when you go back to angular site
browser.ignoreSynchronization=false;
答案 1 :(得分:0)
因此,当您禁用等待角度或忽略同步时,这意味着您将需要自己等待某种稳定性。有两种方法可以实现此目的:1。关闭控制流并使用异步等待。 2.在转到下一步行动之前解决你的承诺。
我认为你需要在这里使用done()
方法调用,因为异步调用。我对解决承诺的一般看法是...更喜欢使用async / await并删除控制流。
describe('slowchat', () => {
it('start test', (done) => {
browser.waitForAngularEnabled(false);
browser.get('https://www.test.no/eai/bankid20').then(() => {
return element(by.css('[value="Logg inn"]')).click().then() => {
browser.waitForAngularEnabled(true);
done();
});
});
});
});
控制流程已被弃用,因此这将使您领先于曲线。我建议这样做。它将使您的测试更容易调试。
describe('slowchat', () => {
it('start test', async() => {
browser.waitForAngularEnabled(false);
await browser.get('https://www.test.no/eai/bankid20');
await element(by.css('[value="Logg inn"]')).click();
browser.waitForAngularEnabled(true);
});
});
启动时,您需要设置标志以关闭控制流程。在您的配置中,您需要添加以下内容:SELENIUM_PROMISE_MANAGER: false