量角器在构建服务器上失败 - ElementNotVisibleError

时间:2016-06-08 12:20:13

标签: angularjs protractor cucumberjs

我使用黄瓜量角器的所有角度e2e测试在我的机器上运行平稳和精细。但是一旦我在构建服务器上运行测试,我就会收到错误

  

ElementNotVisibleError:元素不可见

     

会话信息:chrome = 51.0.2704.84

     

驱动程序信息:chromedriver = 2.21.371459

     

platform = Windows NT 6.1 SP1 x86_64

一开始,我认为这与时间有关,一些异步的事情正在发生但是经过几个小时的调试后我甚至可以在我的本地机器上重现这个bug。

最小化窗口是不够的,但如果我快速拖动鼠标以使窗口尽可能小,我会收到此错误。所以这只是窗口大小的问题"。

  

因此错误信息非常好,但量角器的含义是什么   在构建服务器上运行?

为什么有些测试通过?量角器似乎"看"构建服务器上的东西,因此

我试过

browser.driver.manage().window().maximize();

我试过

browser.manage().window().setSize(1920, 1200);

我尝试按照建议here更改我的代码,并尝试了很多(绝望的)事情。没有任何效果。

我现在的一个大问题:当我想在某个页面上点击最右边的按钮时,如何在构建服务器(在我的情况下是TFS)上以稳定的方式运行量角器测试?

简短代码示例:

browser.get(browser.baseUrl + '#/somePage').then...
element(by.id(buttonId)).click();

谢谢!

更新

我遇到问题的主要原因是,在构建服务器上运行测试时的屏幕分辨率宽度为1024,因此setSize(1920,1200)失败。出于这个原因,我现在在onPrepare函数中添加了当前resoltuion的输出,这样我将来会得到一个提示:

onPrepare: function () {
        browser.executeScript('return { height: screen.availHeight, width: screen.availWidth, top: screen.availTop, left: screen.availLeft};').then(function (result) {
            console.log("Screen resolution: ");
            console.log(result);
        });

        browser.manage().window().setSize(1920, 1200);

当然,这可以延长一点点来抛出异常或类似的东西。

1 个答案:

答案 0 :(得分:3)

有时,我们需要将所需的元素带入视图,以避免“元素不可见”错误。我们可以通过两种方式来做到这一点:

  • 使用"browser actions"

    var elm = element(by.id("buttonid"));
    browser.actions().mouseMove(elm).click().perform()
    
  • scroll into view

    var elm = element(by.id("buttonid"));
    browser.executeScript("arguments[0].scrollIntoView();", elm.getWebElement());
    

同时链接this answer,其中包含一系列不错的内容,您可以尝试解决此问题。