Как проверить, раскрыто ли раскрывающееся меню с селеном - PullRequest
0 голосов
/ 31 августа 2018

Я автоматизирую тест для мобильного сайта , и у меня возникли проблемы с выбором (содержащим список стран).

Меню так:

<select id="depart" name="fromIsoCode" aria-controls="depart" aria-expanded="false">
  <option value="xx">yyFullName</option>
  <option value="yy">yyFullName</option>
</select>

Важное примечание: Когда меню щелкается и список «виден» для пользователя, атрибут «aria-extended» превращается в «true»

Тест, который я должен сделать, состоит в том, чтобы проверить, что после выбора значения список больше не отображается / не отображается.

Я использовал что-то вместе со следующим кодом для моего теста:

By element = By.cssSelector("select#depart[aria-expanded=\"true\"]")
assertFalse(driver.findElement(element).isDisplayed());

Проблема в том, что даже если элемент не присутствует при достижении этих строк, isDisplayed() возвращает true

В режиме отладки элемент select#depart[aria-expanded=\"true\"] НЕ находится в DOM страницы (но select#depart[aria-expanded=\"false\"] есть)

Результат isDisplayed() противоположен тому, что я ожидаю: Для select#depart[aria-expanded=\"true\"] предполагается, что оно ложно (у меня нет элемента в DOM, но это правда, для select#depart[aria-expanded=\"false\"] это должно быть верно (оно в DOM), но оно ложно ...

Мое первое предположение состояло в том, что это как-то связано с тем, что мы выбираем что-то ранее, но оказывается, что нет, не получается, даже если проверка - это первое, что я делаю на странице.

Второе предположение заключается в том, что это либо что-то конкретное для выбора элемента, и / или проблема с попыткой использовать select#depart[aria-expanded=\"true\"] и select#depart[aria-expanded=\"false\"] в качестве различных элементов, но у меня нет другой идеи, как с этим справиться.


Вопросы:

  1. Как проверить, расширено ли меню выбора / выпадающего меню селеном / Java?
  2. Почему это не работает, как ожидалось?

Редактировать 1 03/09/18

Я пытался проверить значение "aria-extended", оно дает тот же результат. Я вижу это как ложное в DOM, когда предполагается, что оно ложное, но селен становится «истинным», когда смотрит на него в отладке.

Редактировать 2 03/09/18

Отладка Я замечаю следующее: если я "проверяю" мой браузер ДО "просмотра" моей переменной, результат, который я получил в отладке, будет в порядке ...

Отладка приостанавливается -> Я добавляю часы на «aria-extended», они дают «true» (вместо ожидаемого «false») -> Я нажимаю свой браузер / Осматриваю страницу «aria-extended» "false" -> я добавляю вторые часы с тем же элементом или "обновляю" первый, я получил правильное значение в "aria-extended" ("false") ... Увеличение времени ожидания ничего не дает ... Еще несколько пуль, чтобы попробовать, и я вернусь с дополнительной информацией

Редактировать 3 03/09/18

Проблема была не в состоянии выпадающего меню. И мой путь, и theGuy выполняют работу «Проверьте, не раскрыто ли раскрывающееся меню» (Вопрос 1)

Так как это основной вопрос, я принимаю ответ от парня.

Относительно вопроса 2: Вероятно, это особая проблема, которая заслуживает отдельного вопроса, мне удалось временно обойти ее, отправив «ключ табуляции» в списке выбора. Это исправление "В случае возникновения чрезвычайной ситуации", но я не хочу оставлять весь вопрос в ожидании, и я не хочу позволять людям, по крайней мере, не вести.

1 Ответ

0 голосов
/ 31 августа 2018

Попробуйте:

By element = By.cssSelector("select#depart[aria-expanded='true']")
assertFalse(driver.findElement(element).isDisplayed());

Вот еще одно решение, которое вы можете попробовать:

// wait here after you have selected a value so element state is changed and selenium gets updated state. Thread.sleep(); would seem to work best in this case.
String text= driver.findElement(By.id("depart")).getAttribute("aria-expanded");
Assert.assertTrue(text=="false","Dropdown is not expanded");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...