单击下拉框以获得可用的选项列表

时间:2019-01-25 11:28:40

标签: python selenium

当我使用手动检查功能选中一个下拉框时,总是提供一个值。 当我使用硒选择值时,有时会提供一些选项

select = Select(self.driver.find_element_by_xpath(xpath))
print(",".join( [o.text for o in select.options])

选项有时为空

,好像用户单击下拉框时可以填充选项。 我尝试了以下所有方法

wait = WebDriverWait (brower, 10)
optionValue = xpath + "/option[.='Value']"
wait.until(EC.presence_of_element_located((By.XPATH, optionValue)))
...
select.select_by_visible_text("Value")
...
select.select_by_index(1)

select没有打开菜单的click()方法。

您有什么建议?

自我回答-道歉

实际上,下拉菜单是在弹出窗口中,由按钮触发。当弹出窗口触发得太早时,它永远不会被填充。因此,我添加了一个触发弹出窗口的测试,检查下拉菜单的内容,如果下拉菜单中不包含该值,我退出,稍等片刻然后再次执行

nbAttemps = 5
waitTime = 2
optionIsFound = False
while nbAttemps > 0:
    nbAttemps = nbAttemps - 1
    self.driver.find_element_by_xpath("//button[.='No distribution']").click()

    selectXpath="//div/div/bla bla bla"

    select = Select(self.driver.find_element_by_xpath(selectXpath))
    options = [o.text for o in select.options]
    optionIsFound = "Value" in options
    logger.debug("Options in select are " + ",".join( options))
    logger.debug("nbAttemps = %d" % nbAttemps )
    logger.debug("optionIsFound= %s, Value not in %s" % (optionIsFound,options))
    if not optionIsFound:
        # close the popup
        webdriver.ActionChains(self.driver).send_keys(Keys.ESCAPE).perform()
        time.sleep(waitTime)
    else:
        select.select_by_visible_text("Value")
        nbAttemps = 0

2 个答案:

答案 0 :(得分:1)

您可以先使用click()方法单击下拉框,然后从下拉列表中选择值。

如果下拉列表中显示了悬停列表,则可以使用Action类,然后使用moveToElement(element)将鼠标悬停在下拉列表上,然后使用click()方法单击所需的列表下拉菜单中的值。

答案 1 :(得分:0)

尝试选项

def objectoperation(objidtype, objid,texttofind):
element =  driver.find_element(objidtype, objid)
    for option in element.find_elements_by_tag_name('option'):
        if option.text == texttofind:
            option.click()
            break

让我知道它是否有效。