使用单击打开的非角度页面-未使用ignoreSynchronization定义角度,或在没有的情况下等待angular



经过大量的研究和修补,我似乎真的无法让我的Protractor测试做任何其他事情,除了出现与Angular相关的错误,尽管我使用浏览器来避免检测到Angular。

测试涉及一个Angular应用程序,打开其中的下拉列表,然后单击控制台的链接;控制台在一个单独的窗口中打开一个非Angular管理页面。

因此,基于我发现的许多信息丰富的So帖子,我首先使用了这个。。。

browser.driver.getAllWindowHandles().then(function(handles) {
    browser.driver.switchTo().window(handles[1]).then(function() {
//expect for new window here
            });
        });

这似乎奏效了,因为我可以很容易地通过repl到达窗户。问题是当添加以下任一项时。。。

browser.driver.getAllWindowHandles().then(function(handles) {
    browser.driver.switchTo().window(handles[1]).then(function() {
        expect(browser.getLocationAbsUrl()).toContain('/console/login.jsp');
        expect(browser.driver.findElement(By.css('th.login')).getText()).toEqual('Login');
            });
        });

一个需要检查URL,另一个则需要检查页面上的header元素,即表头。当我运行这个时,我得到以下内容:

等待Protractor与页面同步时出错:"在窗口上找不到角度"

当我决定在函数中或在beforeEach中使用browser.ignoreSynchronization = true时,无论以下afterEach是否将其设置为false,我都会得到以下结果:

JavascriptError:角度未定义

我似乎找不到任何"有用"的错误来帮助我调试它,在repl中尝试也无济于事,因为我遇到了同样的问题。为了全面起见,在没有得到第二个窗口的情况下尝试我的URL expect会给我根,而另一个窗口会失败。只做其中一个或另一个会导致同样的问题。更改为常规语法(element(by.css...))不会改变事情。

我的第一个问题到此为止。。。

看来我使用浏览器.getLocationAbsUrl()是为了用于Angular页面,这导致了我的问题。。。本质上,尽管我相信我使用的是纯Webdriver调用,但该调用仍然需要页面上的Angular才能工作。。。正如另一篇文章中所说,browser.driver.getCurrentUrl()的使用是使用Webdriver的非Angular调用,并解决了这个问题。因此,最终代码如下。。。

browser.sleep(1000); //to wait for the page to load
        browser.driver.getAllWindowHandles().then(function(handles) {
            browser.driver.switchTo().window(handles[1]).then(function() {
                expect(browser.driver.getCurrentUrl()).toContain('/console/login.jsp');
                expect(browser.driver.findElement(By.css('th.login')).getText()).toEqual('Login');
            });
        });

这在不设置ignoreSynchronization、BTW的情况下工作。我意识到修复它可能是一件相对简单的事情,只是没想到我会这么快得到它(我昨晚本来打算提交这个问题,但今天早上发布了)。

无论如何,我希望这至少能为其他面临同样问题的人提供一个很好的参考。

看起来getLocationAbsUrl是有角度的abs url
请尝试使用本机驱动程序getCurrentUrl。

--expect(browser.getLocationAbsUrl()).toContain('/console/login.jsp')
++expect(browser.driver.getCurrentUrl()…

最新更新