Java中的Java FluentWait

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

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

换句话说,它不仅仅是隐式和显式等待 ,还可以让您更好地控制等待元素。 它可以非常方便,绝对有用例。

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

(我查看了Waits的文档 – 没有任何内容)。

我相信你可以用Python做到这一点,但它不像FluentWait类那样打包。 其中一些内容未在您提供的文档中进行了详细介绍。

WebDriverWait类具有timeout,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 / element组合成一个语句,但我想通过这种方式你可以看到它的实现位置。

iChar的答案涵盖了如何在Python中使用WebDriverWait来完成FluentWait在Java中所做的工作。 该问题的某些方面仍然没有得到解决:

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

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

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

我唯一能想到的就是Python的WebDriverWait实现中FluentWait (和扩展名为WebDriverWait ),它是:

[ FluentWait (以及扩展名为WebDriverWait )] 可以动态配置其超时和轮询间隔。

[引自此。]

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

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