Java中的Java FluentWait

ale*_*cxe 12 python java selenium wait selenium-webdriver

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

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

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

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

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

小智 20

我相信你可以用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")))
Run Code Online (Sandbox Code Playgroud)

显然你可以将wait/element组合成一个语句,但我想通过这种方式你可以看到它的实现位置.


Lou*_*uis 7

iChar的答案涵盖了如何WebDriverWait在Python中使用FluentWaitJava 来做什么.问题的某些方面仍然没有得到解决:

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

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

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

我唯一能想到的就是Python的WebDriverWait实现中缺少FluentWait(并且WebDriverWait,通过扩展),这是:

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

[引自.]

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

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