如何不忘记再次将量角器转换为角度同步?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何不忘记再次将量角器转换为角度同步?相关的知识,希望对你有一定的参考价值。

我们有一个相当庞大的测试代码库(大约10000行javascript代码),在某些情况下,我们需要关闭Protractor-to-Angular同步:

browser.ignoreSynchronization = true;

但问题是,我们有时会忘记再次打开同步,使所有后续测试失败,原因不明,需要时间和精力进行调试。

有没有办法确保在测试中重新启用同步?

我们确实有基于ESLint的静态代码分析并执行代码审查。

答案

我只是做了AfterTest钩子(取决于你的测试运行器),在那里我把所有东西都设置回它的起始状态,所以如果我甚至忘记在测试中切换回来,或者由于某种原因测试崩溃 - 下一次测试不会受到影响:

我的茉莉花代码。量角器配置:

onPrepare() {
   ...
   afterEach(function () {
    // Setting ignoreSychronization back to true, in case it was changed in tests
    browser.waitForAngularEnabled(true);
    // Setting back to default frame. In case test was working in iframe
    browser.switchTo().defaultContent();

    // This depends on your architecture. We do clean run for each test.
    browser.manage().deleteAllCookies();
    browser.executeScript('window.sessionStorage.clear(); window.localStorage.clear();').then(
        undefined,
        function (err) {
            // Errors will be thrown when browser is on default data URL.
            // Session and Local storage is disabled for data URLs
            // This callback is needed to not crash test, and just ignore error.
        });

     browser.manage().timeouts().implicitlyWait(5000); // I even rewrite implicit wait back to default value, in case i touched it in tests

     // Also you might want to clear indexdb storage after tests.
   })

在实际代码中,我会将其包装到名为resetBrowser的函数或类似的东西中。你也可以从它返回承诺,然后从钩子返回那个承诺 - 所以新的测试不会开始,直到诺言解决

另一答案

有一次,当我在这个相同的场景中挣扎时,我创建了一个辅助函数并在导航到新页面之前调用它。您仍然必须“记住”调用该函数,但至少这只会在您处理该更改的代码中只提供一个位置。

isAngularSite(flag) {
    browser.ignoreSynchronization = !flag;
}

在我的代码中,我称之为utils.isAngularSite(false);

以上是关于如何不忘记再次将量角器转换为角度同步?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WebStorm 中调试角度量角器测试

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

在代码片段中包含类型转换

角度路由更改后量角器找不到元素

如何将角度换成弧度?

量角器同步与异步