Java's FluentWait in Python

在java selenium-webdriver包中,有一个FluentWait类:

每个 FluentWait 实例定义等待条件的最长时间,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions。

换句话说,它不仅仅是隐式和显式等待,而是为您提供更多的控制来等待元素。它可以非常方便,并且绝对有用例。

在python硒包中有什么类似的东西,或者我应该自己实现它吗?

(我已经查看了等待的文档 - 那里什么都没有)。


答案 1

我相信你可以用Python做到这一点,但是它不像FluentWait类那样简单地打包。其中一些内容已在您提供的文档中进行了介绍,但并不广泛。

类具有超时、poll_frequency和ignored_exceptions的可选参数。所以你可以在那里供应它。然后将其与预期条件相结合,以等待元素出现,可单击等...下面是一个示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import *

driver = webdriver.Firefox()
# Load some webpage
wait = WebDriverWait(driver, 10, poll_frequency=1, ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException])
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div")))

显然,您可以将wait/元素组合成一个语句,但我认为通过这种方式,您可以看到这是在哪里实现的。


答案 2

iChar的答案涵盖了如何在Python中使用Java来做Java中的事情。不过,这个问题的某些方面没有得到解决:WebDriverWaitFluentWait

换句话说,[]不仅仅是隐式和显式等待。FluentWait

不。从Selenium的2.42.x版本开始,Selenium实现的只有两种等待方式:隐式和显式。 不是这两种等待之外的东西。这只是一个明确的等待。FluentWait

在python硒包中有什么类似的东西,或者我应该自己实现它吗?

我能想到的Python的实现中唯一缺少的东西(并且,通过扩展)是这样的:WebDriverWaitFluentWaitWebDriverWait

[FluentWait(并且,通过扩展,)]可能动态配置其超时和轮询间隔。WebDriverWait

[引自此处

Python中的类的设计方式是,在创建时一劳永逸地设置其配置值。 允许在创建后更改其配置。因此,可以重用单个对象(或Java中的任何对象)来等待具有不同轮询频率的不同条件。在Python中,您必须创建一个新对象才能使用不同的轮询频率。WebDriverWaitFluentWaitFluentWaitWebDriverWaitWebDriverWait

因此,Python实现没有提供一些东西,但我认为这不足以保证实现。