单击元素时,量角器测试会挂起

时间:2014-02-21 15:52:23

标签: javascript angularjs selenium-webdriver protractor

我一直在尝试编写一个量角器测试,从自定义下拉菜单中选择一个项目。唯一的问题是,当它尝试单击列表中最后一个元素以外的元素时,它会挂起并超时。当我删除click()方法调用它似乎工作正常。由于所有这些调用都是异步完成的,所以当找到元素时,我也看不到停止循环的方法。我的代码如下所示:

    var it = null;
    for(var i = 1; i <= totalNumberOfAccounts; i++) {
        var listItemLocator = '//div[@id="payment-accounts"]/div/ul/li[' + i + ']/label/div/div[2]/div[2]/span[2]';
        var item = browser.driver.findElement(protractor.By.xpath(listItemLocator));
        item.getText().then(function(value) {
            if(value === accountNumber) {
                it = item;
            }
           console.log(value);
        })
        .then(function clickOption() {
            console.log('Clicking...');
            if (it) {
                console.log('Clicking desired item');
                it.click();
                console.log('Clicked..');
            }
        })
    }

我也试过这种方法:

this.selectRichSelectOption = function (selector, item) {

    var selectList = browser.driver.findElement(selector);
    selectList.click();

    var desiredOption = '';
    var i = 1;
    selectList.findElements(protractor.By.tagName('li'))
        .then(function findMatchingOption(options) {

            console.log(options);

            options.some(function (option) {

                console.log('Option:');
                console.log(option);
                var listItemLocator = '//div[@id="payment-accounts"]/div/ul/li[' + i + ']/label/div/div[2]/div[2]/span[2]';
                console.log(listItemLocator);
                var element = option.findElement(protractor.By.xpath('//label/div/div[2]/div[2]/span[2]'));
                console.log('Element:');
                console.log(element);
                i++;

                element.getText().then(function (value) {
                    console.log('Value: ' + value);
                    console.log('Item:');
                    console.log(item);
                    if (item === value) {
                        console.log('Found option..');
                        desiredOption = option;
                        return true;
                    }
                    return false;
                });
            });
        })
        .then(function clickOption() {
            console.log('Click option');
            console.log(desiredOption);
            if (desiredOption) {
                console.log('About to click..');
                desiredOption.click();
            }
        });
};

这个结果更加奇怪。现在,getText()方法调用突然返回一个空String。但是当我试图检索例如class属性我得到了正确的值。文本值在哪里?

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

这似乎是页面加载的问题。选择后,页面无法完全加载。

尝试使用browser.sleep(timeInMs);

答案 1 :(得分:0)

尝试使用节点8 +的异步函数,例如await。我经历了这个令人头疼的问题,await解决了某些事情要出现或具有某些属性。

await browser.wait(EC.presenceOf(element(by.xpath('path leading to element based off attribute'))))

祝你好运