量角器没有滚动到测试元素

时间:2014-08-21 21:46:54

标签: protractor ionic-framework

尝试为离子编写一些量角器测试,意识到选择器element( by.css('.selector'));不再滚动到元素。当它在浏览器中不可见时,会自动无法通过测试。

我花了一些时间来搞清楚。使用ptor.sleep(2000)browser.get('domain');之后延迟页面然后如果我滚动查看元素的部分,它们会通过(按预期)。

我认为这与离子接管滚动事件有关。

有没有人遇到过这个问题,或者对所有元素都有某种scrollTo实现?

样本测试

"use strict";

/* Tests */

var ptor = protractor.getInstance();

describe( "Register page", function ()
{
    browser.get( "#/register" );

    ptor.sleep(2000);

    it( "Check SMS Preference", function ()
    {

        var smsLabelConfirm = element( by.css( ".sms-confirm" ) ),
            smsLabelDeny = element( by.css( ".sms-deny" ) ),
            smsInputConfirm = element ( by.id( "sms-confirm" ) ),
            smsInputDeny = element ( by.id( "sms-deny" ) );

            smsLabelConfirm.click();
            expect( smsInputConfirm.getAttribute( "checked" ) ).toBe( "true" );
            expect( smsInputDeny.getAttribute( "checked" ) ).toBe( null );

            smsLabelDeny.click();
            expect( smsInputConfirm.getAttribute( "checked" ) ).toBe( null );
            expect( smsInputDeny.getAttribute( "checked" ) ).toBe( "true" );

    } );
});

1 个答案:

答案 0 :(得分:5)

结束使用此处提供的答案的变体:How to set focus on a section of my web page then scroll down

更改了它,因此该函数只将元素作为可重用性的参数。似乎在起作用。

var ptor = protractor.getInstance();

var scrollIntoView = function (element) {
  arguments[0].scrollIntoView();
};

describe( "Register page", function ()
{
    browser.get( "#/register" );

    ptor.sleep(2000);

    it( "Check SMS Preference", function ()
    {

        var smsLabelConfirm = element( by.css( ".sms-confirm" ) ),
            smsLabelDeny = element( by.css( ".sms-deny" ) ),
            smsInputConfirm = element ( by.id( "sms-confirm" ) ),
            smsInputDeny = element ( by.id( "sms-deny" ) );

            browser.executeScript(scrollIntoView, smsLabelConfirm);

            smsLabelConfirm.click();
            expect( smsInputConfirm.getAttribute( "checked" ) ).toBe( "true" );
            expect( smsInputDeny.getAttribute( "checked" ) ).toBe( null );

            smsLabelDeny.click();
            expect( smsInputConfirm.getAttribute( "checked" ) ).toBe( null );
            expect( smsInputDeny.getAttribute( "checked" ) ).toBe( "true" );

    } );
});