Я пытаюсь написать тест транспортира, который выбирает элемент из настраиваемого раскрывающегося меню. Единственная проблема заключается в том, что при попытке щелкнуть элемент, отличный от последнего в списке, он зависает и выдает время. Когда я удаляю вызов метода 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() возвращает пустую строку. Но когда я пытаюсь получить, например, атрибут класса, я возвращаю правильное значение. Откуда ушло значение «Текст»?
Может кто-нибудь, пожалуйста, помогите мне?
Я не совсем понимаю вашу проблему, на каких браузерах вы тестировали? Я встретил [проблему с Firefox с опциями] (https://github.com/angular/protractor/issues/480), и есть другие с выпадающими списками в целом. – glepretre
Я проверил тест на Chrome. Нормальное падение вниз прекращается. Мы используем настраиваемый раскрывающийся список, который создается из нескольких div и тегов ul. В общем, это не очень большая проблема, так как вы можете достичь элементов, используя xpath. Используя обычный API Selenium (а не webdriver), я действительно могу добиться того, чего хочу, перейдя через элементы с помощью xpath. С Selenium Webdriver API это выглядит немного сложнее. Поскольку они используют цепочку асинхронных вызовов, чтобы иметь возможность перемещать элементы. – Tranquilized
Проблема, с которой я в настоящее время сталкиваюсь, заключается в том, что всякий раз, когда я просматриваю параметры и пытаюсь получить текстовое значение, вызывая getText(), он кажется пустым. Поэтому мое сравнение не находит элемент, который я хочу выбрать из раскрывающегося списка. – Tranquilized