Необходимо щелкнуть текст в раскрывающемся меню, чтобы изменить параметр по умолчанию в раскрывающемся меню. - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в питоне и селене. Пример структуры HTML-кода:

<li class="dropdown env-dropdown">
   ::before
   <a class="dropdown-toggle" href="">
     <i class="nav-icon fa fa-plug">
       ::before
     </i>
     <span id="configured-env">ENVNAME1</span>
   </a>

   <ul class="dropdown-menu env-dropdown-menu env-menu-scroll">
	<input id="selectedEnv" name="envConfigV0.userPreference.env.environmentId" value="" type="hidden>

     <li>
      <div class="spinner-container" style="display:block;"> </div>
        <i class="fa fa-refresh fa-spin spinner-tsg"></i>
      </div>
     </li>

     <li class="env-data">
       <a id="environmentList0" class="dropdown-toggle" onclick="confirmEnvironmentChange{0}" href="#" data-toggle="modal">
        ENVNAME0
        <input id ="environmentId0" name="#env.name" value="11" type="hidden">
       </a>
     </li>
     <li class="env-data divider"></li>
     
     <li class="env-data">
       <a id="environmentList2" class="dropdown-toggle" onclick="confirmEnvironmentChange{2}" href="#" data-toggle="modal">
        ENVNAME2
        <input id ="environmentId2" name="#env.name" value="6" type="hidden">
       </a>
     </li>
     <li class="env-data divider"></li>

     <li class="env-data">
       <a id="environmentList3" class="dropdown-toggle" onclick="confirmEnvironmentChange{3}" href="#" data-toggle="modal">
        ENVNAME3
        <input id ="environmentId3" name="#env.name" value="9" type="hidden">
       </a>
     </li>
     <li class="env-data divider"></li>
    </ul>
    ::after
   </li>

Конфигурируемым env по умолчанию является ENVNAME1 в раскрывающемся списке env. Мне удалось навести курсор на выпадающее меню, используя следующий код:

env_dropdown = self.driver.find_element_by_xpath('//li[@class = "dropdown env-dropdown"]')
ActionChains(self.driver).move_to_element(env_dropdown).perform()

Я хочу изменить настроенный env на ENVNAME2, нажав на текст «ENVNAME2». Но я не смог этого добиться, попробовав разные варианты. Прошу вас помочь мне в решении этой проблемы.

Ответы [ 3 ]

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

Этот раскрывающийся список не создан с использованием тегов select и options. Итак, выбрать класс из селена не получится.

Обходной путь будет:

  1. Нажмите на выпадающее меню, используя селен
  2. Храните каждый элемент в списке и по одному сопоставляйте его с требуемым текстом. Если совпадение произойдет, просто нажмите на него.

Я предоставляю код для 2, вы можете написать свой собственный код для 1-й части.

drop_down = self.driver.find_elements_by_css_selector("li.env-data a")
for values in  drop_down:
  if values.text==ENVNAME2:
    values.click()
0 голосов
/ 04 сентября 2018

В прошлом я решал множество проблем с помощью JavaScript. Вы можете попробовать и посмотреть, работает ли это

 driver.execute_script("document.getElementById('configured-env')='ENVNAME2'")
0 голосов
/ 03 сентября 2018
self.driver.find_element_by_xpath("//li[@class = 'dropdown env-dropdown']/option[text()='YOUR_NAME_ELEMENT_OF_LIST']").click()

в любом случае вы уверены, что это выпадающее меню? как правило, раскрывающееся меню HTML выглядит примерно так:

<select name="cars">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="fiat">Fiat</option>
    <option value="audi">Audi</option>
</select>

Ваш пример выглядит больше как элемент списка: https://www.w3schools.com/tags/tag_li.asp

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