【问题标题】:Protractor : Make test case wait till authentication is done量角器:让测试用例等到身份验证完成
【发布时间】:2020-11-06 01:35:04
【问题描述】:

我正在开发一个应用程序,我使用 browser.get('app url') 加载页面,然后它重新路由到一些不同的 URL 进行身份验证,提示输入凭据然后转到主页(应用程序 url),而页面完成认证测试用例开始运行。问题是一些初始测试用例失败并出现此错误 'Error while waiting for Protractor to sync with the page: “angularJS testability and angular testability are undefined. 这可能是因为这是一个非角度页面或因为您的测试涉及客户端导航,这可能会干扰 Protractor 的引导。'

我一直在 git/stackoverflow/etc 周围寻找很多东西,但可以找到解决此问题的任何帮助。

【问题讨论】:

  • 您是否尝试过使用ignoreSynchronisation 选项禁用角度检查?
  • browser.waitForAngular(false) 将解决此问题。将其设置在您的 browser.get() 之前,然后在您导航回应用中的角度页面时调用 browser.waitForAngular(true)
  • 它没有帮助:)
  • 您是否尝试导航到页面并登录 onPrepare 方法?您能否详细说明您的代码是如何设置的?

标签: angular promise jasmine protractor e2e-testing


【解决方案1】:

这里有两个尝试

  • 如果您一直使用 async/await 方法进行量角器测试,await 关键字可以帮助您的代码行等待上一步完成。

  • 如果测试中的应用程序完全没有角度,标记 `browser.ignoreSynchronization = true;在量角器配置文件中。

谢谢

【讨论】:

  • 应用程序是有角度的,但身份验证过程似乎是无角度的,尽管它没有在页面上加载。实际上首先测试调用 browser.get('app home page') 然后重定向到第 3 方授权提示我进行凭据登录,成功登录后主页再次重新加载。
  • 您是否已经尝试过这个,因为假设配置 browser.ignoreSynchronization 为假,实际应用程序是有角度的。因此,在您传递登录凭据之前,您可以将 browser.ignoreSynchronization 更改为 true 并在登录后将其恢复为 false ??
【解决方案2】:

试试这样的:-

1) 导航到主页 2)页面将打开并重新路由到登录页面 3)您可以将目标网址(即登录页面网址)发送到函数以等待重定向。 4) 一旦重定向设置同步 = false 5) 完成登录过程 6) 诱导 selenium webdriver 等待 7) 设置同步 = true

这是一个检查 URL 是否已更改的示例函数。函数中内置了一个等待,将有助于同步调用

waitForURLToChange(target, time) {
    console.log(target);
    let timeout = time
    return browser.driver.wait(function () {
      return browser.driver.getCurrentUrl().then(function (actualUrl) {
        console.log(actualUrl.indexOf(target));        
        return actualUrl.indexOf(target) > -1;     
      });
    }, timeout);

};

【讨论】:

  • 假设我在第一个测试用例中调用了 browser.get('app url'),然后它会自动重新路由到不同的登录页面,@Monnie_tester 我应该将你的代码放在哪里。跨度>
  • Then(/^I try to login$/, async() => { await browser,get('url'); await util.waitForURLToChange(); await browser.ignoreSynchronization = true //这里的登录过程 await browser.ignoreSynchronization = false });
  • 你能发布一个完整的例子吗?也许用更多的上下文更新答案。
【解决方案3】:

对我来说,缺少的是 beforeEach 中的 page.navigateTo(),添加它消除了问题-

import { AppPage } from './app.po';
beforeEach(async () => {
    page = new AppPage();
    page.navigateTo();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多