Как заполнить раскрывающийся список, когда он построен с использованием тега ввода с использованием Java и Selenium - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть выпадающий список, созданный с помощью extJS.

<input id="combo-1786-inputEl" data-ref="inputEl" type="text" size="1" name="Query Category" placeholder="Select query category" role="combobox" aria-hidden="false" aria-disabled="false" aria-readonly="false" aria-invalid="true" aria-required="true" aria-haspopup="true" aria-expanded="false" aria-autocomplete="list" class="x-form-field x-form-required-field x-form-text x-form-text-default  x-form-invalid-field x-form-invalid-field-default x-form-empty-field x-form-empty-field-default" autocomplete="off" data-componentid="combo-1786" data-errorqtip="<ul class=&quot;x-list-plain&quot;><li>This field is required</li></ul>" aria-describedby="combo-1786-ariaErrorEl">

Как мы видим, использовался тег 'input', а не 'select'.

Поэтому, когда я посмотрел вверхкак его заполнить, большинство ответов было сделано в предположении, что он был создан с использованием тега 'select', и он не работал.

Также элементы drop down выбираются из БД только тогда, когда я нажимаю на стрелку навыпадающий список: Notice the arrow button on only if we click, the drop down items are retrieved

Таким образом, выпадающие элементы не могут быть найдены на странице источника.

Может ли кто-нибудь один предложить, какЗаполните такие спуски, используя лучшие практики?

PS-У меня есть обходной путь, но это совсем не хорошая практика кода и совсем не универсальный:

driver.findElement(By.xpath("//*[@id='combo-1731-trigger-picker']")).click();//clicking on the arrow key of the drop down.
//Once the drop down item comes, I am trying to replicate pressing the keyboard arrow key,by sending down arrow key to the drop down item(web element)
//This works for me because I know the extact position of my drop down item in the drop down item list.It will stop working if the postion of the drop item changes
//so below loop just presses the down arrow key required number of times.
for(int i=0;i<5;i++){
    driver.findElement(By.xpath("//*[@id='combo-1731-inputEl']")).sendKeys(Keys.ARROW_DOWN);
}
driver.findElement(By.xpath("//*[@id='combo-1731-inputEl']")).sendKeys(Keys.ENTER);

Если вы читаете комментарииупомянуто вместе с приведенным выше кодом, тогда вы сможете понять, насколько хрупка логика.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 сентября 2018

Вы пытаетесь правильно щелкнуть / выбрать элемент в выпадающем меню?У выпадающих элементов есть уникальные идентификаторы?Если это так, вы можете просто передать ему конкретный идентификатор xpath.

Я лично использую Css для поиска элементов, в этом случае это будет

driver.find_element(By.CSS_SELECTOR,'#combo-1731-trigger-picker').click()

driver.find_element(By.CSS_SELECTOR, '#combo-1731-inputEl > nth:child(x)').click()

, где x = количество выпадающих элементов.

или, если у них есть уникальные идентификаторы, тогда используйте

driver.find_element(By.CSS_SELECTOR, '#theUniqueIdGoesHere').click()

Я написал тесты на целые недели, используя селекторы xpath, изо дня в день было тяжело запускать тест и смотреть, как он проваливается.Возвращение и изменение всего на селекторы Css избавили меня от многих головных болей с тех пор, как я начал писать автоматические тесты.

Редактировать: вы можете попробовать следующее:

driver.findElement(By.linkText("Your Links Text Here")).click();

Это будет работать, только если каждыйТекст ссылки также уникален, если нет, он выберет первый найденный.

Если эти работы для вас, вы не против принять мой ответ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...