0
커스텀 드롭 다운 메뉴에서 항목을 선택하는 각도기 테스트를 작성하려고했습니다. 유일한 문제는 목록에서 마지막 요소가 아닌 다른 요소를 클릭하려고하면 중단되고 시간 초과된다는 것입니다. click() 메서드 호출을 제거하면 제대로 작동하는 것 같습니다. 이러한 모든 호출은 비동기 적으로 수행되기 때문에 요소를 찾으면 루프를 중지하는 방법도 표시되지 않습니다. 내 코드는 다음과 같습니다요소를 클릭하면 각도기 테스트가 중단됩니다.
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();
}
});
};
이 하나의 결과는 더 이상하다 :
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..');
}
})
}
가 나는 또한이 방법을 시도했다. 갑자기 getText() 메서드 호출이 빈 문자열을 반환합니다. 하지만 예를 들어 클래스 속성 나는 올바른 값을 다시 얻는다. 텍스트 값은 어디로 갔습니까?
누군가 나를 도울 수 있습니까?
어떤 브라우저에서 테스트 했습니까? 문제를 완전히 이해하지 못합니까? [options with Firefox] 문제 (https://github.com/angular/protractor/issues/480)를 만났습니다. 일반적으로 드롭 다운 목록이있는 항목이 있습니다. – glepretre
크롬에서 테스트를 실행했습니다. 일반적인 드롭 다운은 정상적으로 작동합니다. 우리는 여러개의 div와 ul 태그들로 구성된 사용자 정의 드롭 다운을 사용하고 있습니다. 일반적으로 이것은 xpath를 사용하여 요소에 접근 할 수 있기 때문에 큰 문제는 아닙니다. 정상적인 셀렌 API (webdriver가 아님)를 사용하면 실제로 xpath를 사용하여 요소를 반복함으로써 원하는 것을 얻을 수 있습니다. Selenium Webdriver API를 사용하면 좀 더 복잡해 보입니다. 그들은 비동기 호출 체인을 사용하여 요소를 통해 루프 할 수 있기 때문입니다. – Tranquilized
현재 문제는 내가 옵션을 통해 getText()를 호출하여 텍스트 값을 얻으려고 할 때마다 비어있는 것 같습니다. 그래서 내 비교 드롭 다운에서 선택하려는 요소를 찾을 실패합니다. – Tranquilized