【问题标题】:Jasmine throwing error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVALJasmine 抛出错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调
【发布时间】:2019-09-21 15:15:06
【问题描述】:

我正在尝试自动化 Instagram 关注。我转到个人资料并单击关注者链接。它打开一个模态类型的 div 并且有所有的追随者。 它首先找到 DOM 中存在的所有关注按钮并点击它们。之后它向下滚动并在 DOM 中找到更多关注按钮并单击它们。但滚动 2-3 次后,自动化停止并出现此错误。

!可滚动的 div 图片:https://imgur.com/6s3nGJs

附上以下代码,用于收集关注按钮并点击它们:

element(by.xpath("//div[@role='dialog']")).element(by.tagName("ul")).all(by.buttonText("Follow")).then(links => {
            console.log("Links Length" + links.length);
            if (links.length == 0) {
                this.ScrollDown();
            }
            else {
                for (let i = 0; i < links.length; i++) {
                    if (i >= links.length - 2) {
                        console.log("Scrolling Down");
                        browser.actions().sendKeys(protractor.Key.PAGE_DOWN).perform().then(function(){
                            console.log("Scrolled");
                            browser.sleep(3000);
                        });
                        break;
                    }
                    else {
                        browser.actions().mouseMove(links[i]).click().perform().then(function () {
                            console.log("Clicked on link " + (i + 1));
                            browser.sleep(3000);
                        });
                    }
                }
                this.followProfiles();
            }
        });

向下滚动:

console.log("Scrolling Down");
        browser.wait(browser.actions().sendKeys(protractor.Key.PAGE_DOWN).perform().then(function () {
            console.log("Scrolled down");
        }), 90000);
        browser.sleep(5000);
        this.followProfiles();

【问题讨论】:

  • 错误是指代码中的哪一行?
  • 它没有显示任何行号。只是抛出这个错误
  • 能否附上错误截图?

标签: angular automation jasmine protractor e2e-testing


【解决方案1】:

这是因为您的测试花费的时间超过了为 jasmine 设置的默认超时时间。 要增加这一点,您可以在量角器配置文件中添加以下内容 茉莉花节点选择:{ defaultTimeoutInterval: 480000 //等于 6 分钟 // 如果您的测试花费的时间比这更长,您可以增加它 }

【讨论】:

    【解决方案2】:

    你可以使用js的点击功能来点击你想要的。如果元素存在并且具有宽度和高度(元素无法显示),您可以使用此功能直接单击 htlm 元素。 click() :这个函数是量角器函数,这个函数的作用和鼠标左键点击一样,所以元素刚刚出现并显示出来。 但是js的点击功能可以在元素刚刚出现的时候点击html元素,虽然元素不能显示。 js的点击功能:

    browser.executeScript("arguments[0].click();",geocoding_switcher.getWebElement());

    而且,量角器通常运行很快,所以你应该使用点击js功能点击列表中的所有“关注”按钮,它使测试完美运行,不需要滚动到元素。 在js中,有很多滚动功能。如:

    browser.executeScript("arguments[0].scrollIntoView();", category_label.getWebElement());

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 2018-11-21
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多