我有一个表单有两个下拉菜单,例如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加载的逻辑。
答案 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")
它现在正在工作。