Как найти аргументы на сайте Amazon с помощью webdriver на c #?

#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;
        }
    }