我正在尝试在下拉列表中选择(如果存在)一年中的某个月,其中(月份)可以是从“1月”到“12月”的任何字符串(这些也是下拉列表中的元素)
但不是每个月都必然在名单上。
Select(driver.find_element_by_id("selectMonth")).select_by_visible_text("%s" % (month))
“selectMonth”是列表的id,可见文本根据月份命名。我创建了一个循环,我从1月到12月每月选择一次,但是当月份不在列表中时我遇到了问题(NoSuchElementException)。
在尝试选择月份之前,如何检查月份是否在下拉列表中?
在另一篇文章(Selenium "selenium.common.exceptions.NoSuchElementException" when using Chrome)中有关于NoSuchElementException的一些很好的信息,但我无法用它来解决我的问题。它是相似的,但不一样。
答案 0 :(得分:2)
我认为这应该可以解决你正在尝试的问题。我将下拉列表中每个月的文本添加到列表中,它将在尝试选择循环中的当前月份之前进行检查。
MonthSelect = Select(driver.find_element_by_id("selectMonth"))
DropDownOptions = []
# seems like you have the string of each month in a list/array already so I will refer to that
for option in MonthSelect.options: DropDownOptions.append(option.text)
for month in MonthList:
if month in DropDownOptions:
MonthSelect.select_by_visible_text("%s" % (month))
编辑:
正如@Bob指出的那样,你也可以抓住Exception
:
from selenium.common.exceptions import NoSuchElementException
try:
Select(driver.find_element_by_id("selectMonth")).select_by_visible_text("%s" % (month))
except NoSuchElementException:
pass
通过这种方式,您可以每个月尝试一次,但只是通过不存在的月份。
答案 1 :(得分:0)
您可以考虑假设它是easier to ask forgiveness than permission,而不是检查元素是否存在。换句话说,只是尝试选择事物,如果失败则捕获NoSuchElementException
。