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实现没有提供,但我认为这不足以保证实现。