量角器和定位元件

时间:2018-04-13 09:35:04

标签: protractor

我需要使用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"])

请参阅我想找到的地方的附件。

inspect pic

知道为什么无法找到按钮吗?

2 个答案:

答案 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();
     });
   });
  });
});

使用async / await并删除控制流

控制流程已被弃用,因此这将使您领先于曲线。我建议这样做。它将使您的测试更容易调试。

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