Selenium SelectElement для выпадающего списка - элемент не взаимодействует: элемент в данный момент не виден и не может быть изменен - PullRequest
0 голосов
/ 04 ноября 2019

Это должно быть такое невероятно простое решение, но оно превращается в беспорядок. Просто было большое угловое обновление (Angular 8), и теперь ни один из выпадающих списков больше не выбирается по какой-то причине. Раньше я мог просто использовать SendKeys (Keys.Down) и перебирать все варианты, пока не нашел свой, но это больше не работает.

После некоторых поисков я нашел метод SelectElement. Ниже моя реализация.

SelectElement dropdownSelect = new SelectElement(chromeDriver.FindElement(By.CssSelector("select[aria-describedby='myfield']")));

dropdownSelect.SelectByValue("option1");

HTML выглядит следующим образом

<select _ngcontent-teu-c24="" aria-describedby="myfield">
    <option _ngcontent-teu-c24="" disabled="" value="" ng-reflect-value="">Select</option>
    <option _ngcontent-teu-c24="" value="option1" ng-reflect-value="option1" class="ng-star-inserted">option1</option>
    <option _ngcontent-teu-c24="" value="option2" ng-reflect-value="option2" class="ng-star-inserted">option2</option>
</select>

Всякий раз, когда я пытаюсь выполнить этот код, я получаю эту ошибку: "элемент не взаимодействует: элемент в настоящее время не видени им нельзя манипулировать "

Он всегда виден на странице и кликабелен. Я здесь ломаю голову над тем, как решить эту проблему

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Вам нужно подождать, пока элемент станет кликабельным. Скорее всего, JavaScript что-то делает, а селен движется быстрее, чем JavaScript.

var wait = new WebDriverWait(driver, 10);

wait.Until(d => ExpectedConditions.ElementIsClickable(By.CssSelector("select[aria-describedby='myfield']")));

dropdownSelect.SelectByValue("option1")
0 голосов
/ 05 ноября 2019

Вы можете сначала попробовать раскрывающийся список, а затем щелкнуть нужную опцию.

   chromeDriver.FindElement(By.CssSelector("select[aria-describedby='myfield']")).Click();
   chromeDriver.FindElement(By.Xpath("option[@value='option1']")).Click();
...