【问题标题】:Protractor - switch tabs error量角器 - 切换标签错误
【发布时间】:2015-12-27 20:31:57
【问题描述】:

我正在尝试切换到另一个选项卡并使用该新选项卡上的控件,但出现此错误:

UnknownError:条目中的空值:name=null

这是测试(重要部分):

element(by.repeater("project in projects").row(1).column("{{project.name}}")).click().then(function(){

       flow.timeout(5000);
       $('.project-data a').click().then(function () {
            browser.getAllWindowHandles().then(function (handles) {

         flow.timeout(5000);

            browser.switchTo().window(handles[1]).then(function () {
            browser.sleep(5000);
            browser.ignoreSynchronization = true;

           });

测试中还有其他部分,但不相关,因为我在这部分中遇到错误。 流程是这样的: 单击链接后,选项卡打开,似乎切换到新选项卡 - 然后失败并关闭窗口。

【问题讨论】:

  • 如果我错了,请纠正我,但不是 browser.getAllWindowHandles() 获取打开的浏览器的所有 WINDOWS 吗?你说它切换到选项卡并失败并关闭,在我看来链接只是打开一个选项卡并切换焦点,而你没有成功切换到该选项卡。
  • 我也想知道,但 Windows 和 Tabs 的切换方式似乎相同..
  • 您可以打印browser.getAllWindowHandles() 并查看您获得的值吗?如果你得到 2 那么你所做的就是有效的,如果不是,那么你不应该切换窗口。当您在同一页面中切换选项卡时,我认为不需要窗口句柄。
  • 我以此为参考:stackoverflow.com/questions/26798020/…。无论如何-如果不通过 browser.getAllWindowHandles(),您知道如何在选项卡之间切换吗?我试过打印“getAllWindoHandles()”并得到一个长对象。
  • 很抱歉造成的混乱,我问你是否可以打印'getAllWindowHandles()'结果。即handles.length 值。但是,如果单击时在您的浏览器中打开了一个新选项卡,那么上述方法应该可以帮助您。还要检查你的代码执行时是否真的打开了一个新的浏览器选项卡。

标签: javascript selenium selenium-webdriver protractor angularjs-e2e


【解决方案1】:

像这样使用browser.wait 而不是flow.timeout(5000)

browser.wait(function() {
    return handles.length > 1
}, 5000);

而不是第二个flow.timeout(5000) 使用:

browser.wait(function() {
    return browser.getCurrentUrl().then(function (url){
        return url = "url of the second tab";
    });
}, 5000);

它看起来更干净,处理得更好,最重要的是,它可以完成这项工作

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多