使用selenium和python的相关DROP-DOWN选择

时间:2016-03-07 12:41:49

标签: python selenium

我有一个表单有两个下拉菜单,例如A和B.下拉列表B的内容取决于下拉列表A的选择。

表单使用AJAX加载下拉列表B的内容。

我正在使用selenium和python来自动选择下拉列表。我可以选择下拉A但由于使用了AJAX,我的代码无法选择下拉列表B的内容。

我搜索了selenium文档(显式等待)和一些stackoverflow的答案,但我仍然无法在python中实现它。我是蟒蛇和硒的新手所以请耐心等待。

以下是我的代码的一小部分:

#District selection DROP-DOWN A
district=Select(driver.find_element_by_id("ddlDistrict85"))
district.select_by_value("1")

#SRO selection DROP-DOWN B
# I Need EXPLICIT WAIT logic here to wait till the entire drop-down B is loaded
sro=Select(driver.find_element_by_id("ddlSRO85"))
sro.select_by_value("1")

建议等待整个下拉列表B加载的逻辑。

3 个答案:

答案 0 :(得分:0)

您可以使用Select中的options属性来检查下拉列表中是否包含元素

district=Select(driver.find_element_by_id("ddlDistrict85"))
district.select_by_value("1")

sro=Select(driver.find_element_by_id("ddlSRO85"))
while len(sro.options) == 0:
    continue
sro.select_by_value("1")

答案 1 :(得分:0)

你还没有分享html对于这些不同菜单的看法,所以让我假设下拉列表B由具有特定类的DIV包装,或者更好的ID,或许:

<div id="menuB"> ... </div>

现在,您可以使用Expected Conditions等待该菜单出现。

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID,'menuB')))

答案 2 :(得分:0)

经过大量搜索,我发现了一个简单的解决方案,我可以选择下拉列表中的内容。 所以我正在回答我自己的问题。

使用sleep模块中的time函数暂停执行程序一段时间(以秒为单位)。

程序代码如下:

import time #To import time module
#District selection
district=Select(driver.find_element_by_id("ddlDistrict85"))
district.select_by_value("1")
#SRO selection
time.sleep(5) 
sro=Select(driver.find_element_by_id("ddlSRO85"))
sro.select_by_value("1")

它现在正在工作。