【问题标题】:Need to click a text from the dropdown menu to change the default option in the dropdown menu需要从下拉菜单中单击一个文本来更改下拉菜单中的默认选项
【发布时间】:2018-09-04 08:34:14
【问题描述】:

我是 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>

默认的configured-env 是下拉菜单env-dropdown 下的ENVNAME1。我可以使用以下代码将鼠标悬停在下拉菜单上:

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

我想通过单击文本“ENVNAME2”将配置的环境更改为 ENVNAME2。但是在尝试了各种选项后,我无法实现这一目标。请您帮我解决这个问题。

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    此下拉菜单不是使用 select 和 options 标签。因此,从 selenium 中选择类将不起作用。

    解决方法是:

    1. 使用 selenium 点击下拉菜单
    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()
    

    【讨论】:

    • 这段代码会导致TypeError: 'WebElement' object is not iterable
    • @Andersson :更改为find_elements。无论如何,谢谢。
    • @cruisepandey 和 Andersson 非常感谢您的帮助。该代码对我有用。 env_dropdown = self.driver.find_element_by_xpath('//li[@class= "dropdown env-dropdown"]') ActionChains(self.driver).move_to_element(env_dropdown).perform() time.sleep(2) drop_down = self. driver.find_elements_by_css_selector("li.env-data a") 对于 drop_down 中的值: if values.text == "ENVNAME2": values.click()
    【解决方案2】:
    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

    【讨论】:

    • 不,这行不通。作为 OP 共享的 HTML,Drop down 不是使用 select 和 options 标签构建的。
    【解决方案3】:

    过去我使用 javascript 解决了很多问题。你可以试试看是否有效

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多