【问题标题】:How to select value from dropdown which is not in <div> using selenium python如何使用 selenium python 从不在 <div> 中的下拉列表中选择值
【发布时间】:2022-01-12 20:38:01
【问题描述】:

我有以下 html 代码,我只想点击下拉菜单并选择第一个值。我该如何实现。我在从下拉菜单中选择值时遇到问题,但能够点击下拉菜单

<div id= "location-select-list" class="mb-list" role="role0">
    <mb-option id='1' class='classname' role='rolename' data-auto-id="dt1" aria-disabled="False" 1 </mb-option>
    <mb-option id='2' class='classname' role='rolename' data-auto-id="dt2"aria-disabled="False" 2 </mb-option>

我试过了,但没有用。

#click on the dropdown--working

WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,
                                        xpath_0))).click()
#selecting 1st value from the dropdown value list--not working

xpath = "//div[@id='location-select-list']//mb-option[@data-auto-id='dt1']"
WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH,
                                        xpath))).click()

【问题讨论】:

  • 1) //div[@id='location-select-list']//mb-option[@data-auto-id='dt1'] 是唯一的定位器 2) 您是否尝试过使用 visibility_of_element_located 而不是 element_to_be_clickable,尤其是对于第二个命令? 3)你能分享一个指向那个页面的链接吗?
  • 尝试使用visibility_of_element_located 使用select。但它会抛出错误,因为下拉列表是在 div 中编码的。是的,xpath 是唯一的
  • 我在你的 HTML 中看不到 select。那么,如果它不存在,为什么要使用它?
  • 我提供的代码不包含任何select
  • 但是在之前的评论中你提到“使用select”..

标签: python-3.x selenium selenium-webdriver


【解决方案1】:
<div id= "location-select-list" class="mb-list" role="role0">
    <mb-option id='1' class='classname' role='rolename' data-auto-id="dt1" aria-disabled="False" 1 </mb-option>
    <mb-option id='2' class='classname' role='rolename' data-auto-id="dt2"aria-disabled="False" 2 </mb-option>

试试这个

#click on the dropdown--working
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,
                                        xpath_0))).click()

#my code
elem_list = driver.find_elements_by_class_name('classname') 
elem_list[0].click()

或者

elem_list = driver.find_elements(By.XPATH, "//mb-option[contains(@class, 'classname')]"):
elem[0].click()

【讨论】:

  • 成功了,非常感谢。但是还有一个问题。我还有一个像这样具有相同类名的下拉列表。&lt;div id= "timezone-select-list" class="mb-list" role="role0"&gt; &lt;mb-option id='3' class='classname' role='rolename' data-auto-id="dt3" aria-disabled="False" 1 &lt;/mb-option&gt; &lt;mb-option id='4' class='classname' role='rolename' data-auto-id="dt4"aria-disabled="False" 2 &lt;/mb-option&gt; 有什么方法可以引用顶级id,这里是timezone-select-list
  • 您可以使用相同的策略创建具有相同类名的元素列表,然后根据需要单击。 list_of_select = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, //div[contains(@class, 'mb-list')] ))) list_of_select[0].click() #然后做不管你有什么 list_of_select[1].click() #然后做你必须做的(如果你不能弄清楚,请创建一个新问题并尽快查看)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多