#c# #selenium-webdriver
#c# #selenium-webdriver
Вопрос:
Я создаю новое приложение для автоматизации, которое использует сайт Amazon, и у меня возникают проблемы с поиском некоторых элементов. Структура страницы меняется, поэтому она должна быть динамической для разных учетных записей Amazon.
Это для нашего корпоративного сервера, работающего с использованием Visual studio 2017.
fiftElement = browseDriver.FindElement(By.ClassName("a-popover a-dropdown a-dropdown-common a-declarative"));
fiftElement.FindElement(By.XPath("//li[contains(@data-value,'RO_CR-DEFECTIVE')]")).Click();
как вы могли [1]: https://gyazo.com/0f4c52f4eccdd9d9b15379cf1dee7c42
Я пытаюсь щелкнуть определенное поле из выпадающего списка, где порядок полей может измениться, и между ними нет разницы, кроме «значения данных» и текста
Я хотел бы просто найти поле «Элемент неисправен» и щелкнуть по нему.
Ответ №1:
Вы можете взять все выпадающие элементы в списке и выполнить итерацию по нему, чтобы проверить, содержит ли он Item defective
текст, и как только вы получите текст, вы можете нажать на эту опцию.
Если есть только один выпадающий список с классом a-dropdown-item
, вы можете получить список webelement simple, используя:
List<WebElement> dropdownElements = browseDriver.FindElements(By.ClassName('a-dropdown-item'));
И если есть несколько выпадающих списков с одним и тем же именем класса, вы можете получить этот конкретный выпадающий список, используя следующий xpath:
List<WebElement> dropdownElements = browseDriver.FindElements(By.Xpath('//div[contains(@class,'a-popover-inner')]//li[@class='a-dropdown-item']//a'));
И затем вы можете добавить логику для сопоставления текста, например:
for (int i = 0; i < dropdownElements.Count; i ) {
if (dropdownElements.get(i).getText().contains("Item defective")) {
dropdownElements.get(i).click();
break;
}
}