量角器点击动作依赖于ptor.sleep()。我该如何正确解决?

时间:2014-11-20 21:02:08

标签: promise protractor control-flow

我是一个新手试图不依赖或根本不依赖ptor.sleep()来电,尤其是在点击下方后。下面的行永远不会获得值(它们都返回Nan),除非我在ptor.sleep(1000);之后包含click()调用。

我已经做了各种尝试,使得数组elem在点击结果之前解决,点击功能之后等等,但是我没有试过没有睡眠调用的情况。已经阅读了量角器控制流程。

devCountString = parseInt(arr[i]);

感谢您提供任何见解,也许我已经错过了一些明显的内容,以便我可以删除ptor.sleep()来电。

我的规格:

describe('\n  == patch List suite results == \n', function() {

// login already was done in config files, onPrepare function.
var ptor, noFilterCount;

// needed here if we turn ptor.ignoreSynchronization = false;

beforeEach(function() {
    ptor = protractor.getInstance();
    ptor.ignoreSynchronization = true;
    browser.get('https://my.abc.com:3000/fixes');
    ptor.sleep(1200);
});  //end beforeEach()

it('11 - verify filter fewer', function() {

    var sevStringElm, sevString;
    var applicableCount;

    ptor.ignoreSynchronization = false;
        ptor.sleep(500);

    sevStringElm = element(by.css("input.form-control.bf-spinner"));
        sevStringElm.clear();
        ptor.sleep(500);

    sevStringElm.sendKeys( '8' );
        ptor.sleep(500);

// click on the "fewer" spinner, wrap the click to wrap the .
    var fewerPromise = element(by.css("span.bf-spinner-toggle:nth-child(2)")).click(); 
        ptor.sleep(1000);

// now get the list of clickable elements in each device card. by title 
    var applicableDevicesElm = element.all(by.css("[title$='Applicable\ Devices']"));
        applicableDevicesElm.getText().then(function(arr) {
            console.log("arr.length= "+arr.length);
            for (var i = 0; i < arr.length; i++) {
                devCountString = parseInt(arr[i]);
                expect(devCountString).toBeLessThan( 9 );
            };
        });
    });

1 个答案:

答案 0 :(得分:0)

每次动作进入webdriver时,Protractor都会将其放入流队列中,如图in the documentation所示。因此,当您在单击后检查元素时,队列应该已经解决了依赖关系,并为查找程序准备好您的状态。在任何情况下,即使您不希望Protractor对其操作(总是asyc)进行隐式包装,您也可以在单击后放置.then(function(){})并将后点击逻辑放入那个匿名的回调函数。 另外,您应该再使用ptor。使用browser代替混合了量角器实例功能。示例:browser.sleep(1000)