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



我一直在尝试编写一个量角器测试,从自定义下拉菜单中选择一个项目。唯一的问题是,当它尝试单击列表中最后一个元素以外的元素时,它会挂起并超时。当我删除 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() 方法调用突然返回一个空字符串。但是当我尝试检索例如类属性时,我得到了正确的值。文本值去了哪里?

有人可以帮我吗?

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

尝试使用browser.sleep(timeInMs);

尝试使用节点8+的异步函数,如await。我经历了这个头痛,通过await某些东西出现或具有某些属性来解决。

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

祝你好运

最新更新