当前位置: 首页 > 知识库问答 >
问题:

使用“OR”组合多个硒等待?

东门俊智
2023-03-14

我的selenium代码通过等待网站标题更改来检查完成的子例程,该子例程运行良好。代码如下所示:

waitUntilDone = WebDriverWait(session, 15).until(EC.title_contains(somestring))

但是,这有时可能会失败,因为站点的登录页面在手动网站访问后发生变化。服务器会记住您离开的位置。这迫使我检查另一个条件(网站标题="notestring2)。

以下是我到目前为止所想到的(据我所知也有效):

    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

这些条件中的任何一个始终为真。我不知道你是哪一个。

有没有什么方法可以在这些等待中包含一个“或”,或者让try/⃣块看起来更好?

共有1个答案

江嘉悦
2023-03-14

看起来硒会让你通过创建自己的类来做到这一点。查看此处的文档:http://selenium-python.readthedocs.io/waits.html

下面是针对您的情况的快速示例。请注意,关键是在类中有一个名为 __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))
 类似资料:
  • 问题内容: 我喜欢这样的查询: 在ORMlite中,可以使用以下代码: 如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。 基本上,这种方法是不够的。它需要其他支持的方法的条件。 感谢您的任何建议。 问题答案: 如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。 在ORMLite 中有一点语法上的缺陷。您打电话的时候: 该方法得到的是: 您确实可以将其重写为:

  • 我需要合并两个数据帧。为了确保行是唯一的,我需要在合并之前验证“Name”和“Age”是否匹配。我将组合用作主键。这是我的密码: 当我使用多个键(“姓名”和“年龄”)时,这是一个“和”或“或”匹配。我只希望它在“Name”和“Age”匹配时合并,而不是只在“Name”或“Age”匹配时合并。我似乎在文档中找不到这一点,我得到了一些混合的结果。 更新:由于数据原因,我确实需要进行左连接。右边的表是我

  • 我有以下代码: 现在我想再组合一个数组和中的它的值。这是foreach语句中的三个数组。谁能帮我把它加进去。比如我们如何在foreach语句中添加多个。 例如,我想要以下内容: 但是上面的代码给出了。我得到的错误是 分析错误:语法错误,在/homepages/4/d864452909/htdocs/public_html/app/index.php第58行中,意外的“=>”(T_DOUBLE_AR

  • 我是初学者。我了解Wait的基本功能,但我对互联网上不同的教程如何放置和解释它感到困惑。例如,在下面的代码中,它是在加载URL之前放置的。那么,是只等待加载URL,还是等待查找元素,或者两者都是?如果我在try块中使用隐式等待一次,它将适用于我在代码中执行的每个元素搜索,这是真的吗?

  • 我正在尝试迁移应用程序。我正在处理从Hibernate到Spring的数据JPA。 有人能告诉我这是否可以通过

  • 当用户登录到我的java应用程序时,我试图创建一个朋友列表。我有3张桌子,用户,朋友和歌曲。 用户表: 好友表(ID=USER表中的ID) 歌曲表(同样ID=用户) 所以我需要做的是,当用户登录时,从朋友表中选择他们的所有朋友,获取关于这些朋友的所有信息,并选择属于该朋友的每首歌曲。 目前,我有一些sql将选择朋友和他们的信息正确,但我无法管理结合起来,这与获得的歌曲<理想情况下,我希望循环获取每