我的selenium代码通过等待网站的标题进行更改来检查完成的子程序。代码如下所示:
waitUntilDone = WebDriverWait(session, 15).until(EC.title_contains(somestring))
但是,有时这可能会失败,因为手动网站访问后网站的目标网页会发生变化。服务器会记住你离开的地方。这迫使我检查一个替代条件(网站标题=“somestring2”。
这是我到目前为止所提出的(也是我能说的):
try:
waitUntilDone = WebDriverWait(session, 15).until(EC.title_contains(somestring)) # the old condition
except:
try:
waitUntilDone = WebDriverWait(session, 15).until(EC.title_contains(somestring2)) # the new other condition which is also valid
except:
print "oh crap" # we should never reach this point
这些条件中的任何一个始终为真。我不知道你是哪一个。
有没有办法在这些等待中包含“OR”或使try / except块看起来更好?
答案 0 :(得分:1)
看起来selenium会让你通过创建自己的类来实现这一点。在这里查看文档:{{3}}
以下是您案例的快速示例。请注意,关键是在类中使用名为__call__
的方法来定义所需的检查。 Selenium将每隔500毫秒调用该函数,直到它返回True或某些非空值。
class title_is_either(object):
def __init__(self, locator, string1, string2):
self.locator = locator
self.string1 = string1
self.string2 = string2
def __call__(self, driver):
element = driver.find_element(*self.locator) # Finding the referenced element
title = element.text
if self.string1 in title or self.string2 in title
return element
else:
return False
# Wait until an element with id='ID-of-title' contains text from one of your two strings
somestring = "Title 1"
somestring2 = "Title 2"
wait = WebDriverWait(driver, 10)
element = wait.until(title_is_either((By.ID, 'ID-of-title'), somestring, somestring2))