2016-06-08 95 views
2

所有使用量角器和黄瓜的角度e2e测试在我的机器上运行平稳顺利。但只要我运行生成服务器上的测试中,我得到一个错误构建服务器上的量角器失败 - ElementNotVisibleError

ElementNotVisibleError: element not visible

Session info: chrome=51.0.2704.84

Driver info: chromedriver=2.21.371459

platform=Windows NT 6.1 SP1 x86_64

在开始的时候,我认为这事做具有定时,正在发生一些异步的东西,但调试我小时后甚至可以在我的本地机器上重现该错误。

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

Thus the error message is quite ok, but how are protractor meant to run on a build server?

为什么有些测试通过?量角器似乎“看”到构建服务器上的东西,从而

我试图

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

我试图

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

,我试图改变我的代码的建议here,我尝试了很多更多(绝望)事物。没有工作。

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

短代码示例:

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

谢谢!

UPDATE:

我的问题的主要原因是事实,屏幕分辨率在运行生成服务器上测试了宽度为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); 

当然,这可以延长一点点地抛出一个异常或东西喜欢这个。

+0

快速检查。你确定'buttonId'是唯一的吗?..在输出中会出现什么情况:'element.all(by.id(“buttonId”))。count()。then(function(count){console.log(count);});'。? – alecxe

+0

嗨@alecxe,非常感谢您的帮助。输出是1. – timtos

+0

好吧,你确定这不是一个时间问题?你有没有尝试过'browser.wait(EC.elementToBeClickable(element(by.id(buttonId))),5000);'哪里'var EC = protractor.ExpectedConditions;'在点击按钮之前? – alecxe

回答

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拥有一套漂亮的东西你可以尝试解决这个问题。

+0

嘿家伙。非常感谢您的提示。我的构建服务器的分辨率只有1024x768,所以我的元素永远不可见。我已经使用了alecxe的'scrollIntoView()'方法来解决这个问题。 – Ben

相关问题