量角器browser.wait导致角度超时

时间:2015-10-22 11:26:38

标签: javascript angularjs selenium selenium-webdriver protractor

我有这段代码

<div id="mainContainer">
    <div class="backStrip"> 
        <span id="infoText">Written By Banmeet Singh</span>
    </div>
    <ul id="thumbsButtons"></ul> <span id="nextArrow">></span>
    <span id="sidelogo">Thinking Forward</span>
    <ul id="thumbsList">
        <li>
            <img class="forward" src="http://placehold.it/350x150" alt="Alternate Text" /> <span class="headerInfo">Josh Kloss</span>
        </li>
        <li>
            <div class="thumbOverlay"><span>adasd</span> </div>
            <img class="forward" src="http://placehold.it/350x150" alt="Alternate Text" />
        </li>
        <li>
            <img class="forward" src="http://placehold.it/350x150" alt="Alternate Text" />
        </li>
        <li>
            <img class="forward" src="http://placehold.it/200x100" alt="Alternate Text" />
        </li>
        <li>
            <img class="forward" src="http://placehold.it/350x150" alt="Alternate Text" />
        </li>
        <li>
            <img class="forward" src="http://placehold.it/200x100" alt="Alternate Text" />
        </li>
    </ul>
    <div id="counterContainer">3 of 10</div>
</div>

如果我用浏览器删除该行等待测试继续,否则我得到

  

'等待量角器与页面同步时出错:“根元素(正文)没有注入器。这可能意味着它不在ng-app内。”'

当“by.model”行出现时,等待(不使用任何有角度的东西)怎么办?

另外我几乎可以肯定它在今天早上出去做一些差事之前已经有效了。

1 个答案:

答案 0 :(得分:4)

如果您要测试的网页是有角度的,那么您应该在代码中将ignoreSynchronization设置为false - browser.ignoreSynchronization = false;

另外,请确保您的html body标签上有ng-app属性,而没有该属性,量角器无法识别其角度或非角度页面。如果您的ng-app标记位于body标记的后代元素上,则使用conf.js文件中的属性rootElement来指示量角器从该标记开始检查角度。这是怎样的 -

rootElement: 'body/div', //if ng-app tag is on a div element under body

browser.wait()函数中未解决isElementPresent()返回的承诺。 wait()函数始终等待返回布尔值,直到超时值到期,如果它没有返回任何内容,则抛出错误。同样isElementPresent()根据元素的存在返回一个布尔值。以下是如何使用它 -

browser.wait(function() { 
    return browser.isElementPresent(by.css('[class="box-header"]')).then(function(present){
        return present;
    });
}, 10000);

如果您只是想通过使用量角器具有的ExpectedConditions对象来检查DOM上是否存在该元素,那么还有另一种简单的方法。以下是一些使用示例 -

var EC = protractor.ExpectedConditions;
var element = element(by.css('[class="box-header"]'));

browser.wait(EC.visibilityOf(element), 10000); //Checks if element is present and enabled on DOM
browser.wait(EC.presenceOf(element), 10000); //Checks if element is present on DOM
browser.wait(EC.elementToBeClickable(element), 10000); //Use it if you want to wait for element to be clickable Checks if element is present and enabled on DOM

希望它有所帮助。