需要从下拉菜单中单击文本以更改下拉菜单中的默认选项

时间:2018-09-03 09:49:55

标签: python selenium selenium-webdriver

我是python和Selenium Webdriver的新手。 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_dropdown = self.driver.find_element_by_xpath('//li[@class = "dropdown env-dropdown"]')
ActionChains(self.driver).move_to_element(env_dropdown).perform()

我想通过单击文本“ ENVNAME2”将configure-env更改为ENVNAME2。但是尝试各种选择后,我无法实现这一目标。请您帮助我解决此问题。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

此下拉列表不是使用select和options标记创建的。因此,从硒中选择类将不起作用。

解决方法是:

  1. 单击使用硒的下拉列表
  2. 将每个元素存储在列表中,然后将其与所需的文本一一对应。如果发生匹配,则只需单击它。

我正在提供2的代码,您可以为第一部分编写自己的代码。

drop_down = self.driver.find_elements_by_css_selector("li.env-data a")
for values in  drop_down:
  if values.text==ENVNAME2:
    values.click()

答案 2 :(得分:0)

过去,我已经使用javascript解决了许多问题。您可以尝试看看是否可行

 driver.execute_script("document.getElementById('configured-env')='ENVNAME2'")