如何在selenium中等待可点击的选项?

时间:2017-03-05 01:09:51

标签: python selenium

我现在正在编写一个脚本来从网站获取信息,并且有很多选择/选项字段。问题是,目前我正在检查选择框是否可点击,然后尝试单击选项,但这大约有15%的时间。这是等待元素可点击的行:

schoolbox = Select(WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.ID, "clCampusSelectBox"))))

如何等待此select元素下方的选项可点击?

由于

编辑:以下是下拉列表:https://shop.bookstore.ubc.ca/courselistbuilder.aspx

2 个答案:

答案 0 :(得分:0)

必须可见并启用可点击元素。 <option>下的<select>元素通常不可见,因此“可点击”检查将失败。我建议您等待下拉列表可见,然后使用select class选择选项

schoolbox = Select(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "clCampusSelectBox"))))
schoolbox.select_by_value("someValue")

答案 1 :(得分:-1)

我写这封是为了通知你,等待select_list和等待选项是两回事!你为什么要等select_list是可点击的?你需要等待选择,对吧?我不知道python,我正在使用WATIR(语言是Ruby)等待select_list然后等待选项会自动发生,你没有写任何东西

这个简单的代码就足够了

b.select_list(:id,'q').select 'hi'

它会自动等待选择列表出现,然后等待选项出现,你不必刻意做任何事情。

但如果我想编写等待select_list的代码,那么我会写

b.select_list(:id,'q').wait_until_present.select 'hi'

如果我想在select_list中编写等待选项的代码,那么我将编写

b.select_list(:id,'q').option(:text,'hi').wait_until_present.select

如果我想等待两者,那么我会写

b.select_list(:id,'q').wait_until_present.option(:text,'hi').wait_until_present.select

但这些在WATIR中不是必需的,因为它会自动等待所有内容。

所以你需要知道的是是否要等待select_list或等待选项,因为在某些情况下你的选择列表选项将根据某些条件填充。