Selenium создает исключение NoSuchElementException при попытке найти опцию, даже если она существует - PullRequest
0 голосов
/ 07 ноября 2018

Один из сценариев, который ранее работал, в настоящее время не работает, и я не могу его отладить.

Селен бросает NoSuchElementException в следующую строку:

SelectPrimeraCompetencia.SelectByText(valorCompetencia, true);

Значение valorCompetencia равно APR, поэтому строка становится:

SelectPrimeraCompetencia.SelectByText(APR, true);

SelectPrimeraCompetencia представляет собой SelectElement со следующим кодом:

<select class="w100x100" data-notrack="true" data-bind="
								 options: $root.sistemasCalificacionValor
								,optionsText:'clave'
								,value: sistemaCalificacionValorSeleccionado
								,optionsCaption: ''
								,enable: !$root.soloLectura()
								,css: { 'disabled' : $root.soloLectura }
						">
  <option value=""></option>
  <option value="">SUS</option>
  <option value="">APR</option>
</select>

Как видите, текст третьего варианта APR

Если я проверю SelectPrimeraCompetencia во время выполнения, мы увидим следующие опции:

SelectElement at runtime

Что подтверждает, что опция в тексте индекса 2 равна APR

Однако, исключение все еще появляется:

enter image description here

Любая помощь приветствуется.

Привет.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Как насчет циклического прорисовки оприонов элемента select и выбора опции по индексу.

Это может выглядеть так:

foreach(var item in SelectPrimeraCompetencia.Options)
{
    int count = 0;
    if(item.Text == valorCompetencia)
    {
        SelectPrimeraCompetencia.SelectByIndex(count);
    }
    else
    {
        count++;
    }
}
0 голосов
/ 08 ноября 2018

Я вижу встроенные атрибуты для «включен» и «отключен». Я не знаком с кодом, поэтому я думаю, что веб-драйвер думает, что с элементом нельзя взаимодействовать. Вы можете попытаться выбрать элемент другим способом, чтобы доказать или опровергнуть мою догадку.

https://stackoverflow.com/a/18662992/2092742

Вам нужно использовать JavaScriptExecutor для этой задачи, WebDriver не может нажимать на элементы, которые отключены или невидимы. Так что попробуйте что-то вроде

JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("document.querySelector(\"button[id=yourButton]\").click()");
...