expect(locator).to_be_visible()
和locator.wait_for()
有区别吗?我是否应该更喜欢其中一个?
我查过__doc__
年代:
-
wait_for
:当定位器指定的元素满足state
选项时返回.(state
默认为'visible'
). -
to_be_visible
:确保收件箱指向附加且可见的多姆 node .
尽管如此,还不是很清楚.定位器是否可能可见但不连接?如果是这样,如果我确定所定位的元素已连接,它们会相等吗?
expect(locator).to_be_visible()
和locator.wait_for()
有区别吗?我是否应该更喜欢其中一个?
我查过__doc__
年代:
wait_for
:当定位器指定的元素满足state
选项时返回.(state
默认为'visible'
).to_be_visible
:确保收件箱指向附加且可见的多姆 node .尽管如此,还不是很清楚.定位器是否可能可见但不连接?如果是这样,如果我确定所定位的元素已连接,它们会相等吗?
定位器是否可能可见但不连接?
不,这不可能.为了使元素可见,它需要附加到(文档中的)多姆树,并且具有非零的高度和宽度,在视图中,上面没有其他元素等.换句话说,visible是attached的子集,从某种意义上说,所有可见元素都必须附加,但并非所有附加元素都是可见的.
wait_for
并不是一个明确的断言.这是一种定位器方法,可以让您阻止,直到满足特定的可见性/附件判定(文档中描述了各种选项).它可以用于没有expect
的测试场景,但这有点不寻常.主要用例是当您希望元素处于某种附加/可见性状态但没有对其采取特定操作时.
由于大多数定位器操作都是自动等待的,因此在浏览器自动化中通常不需要wait_for
个--只需使用自动等待操作,例如.click()
、.fill()
、.text_content()
等.
to_be_visible
是一个显式断言,表明元素已被附加且可见.您可以将其视为wait_for
提供的功能的一个面向预期的子集.
一般来说,如果您正在编写测试(这是一个常见的断言),则使用to_be_visible
,否则在极少数情况下,当您正在执行正常的浏览器自动化并且需要阻止直到元素可见而不采取行动(这相对不常见).
如果您正在编写期望附加元素但不关心可见性的测试,那么您可能会对to_be_attached
感兴趣,它以断言形式提供了wait_for
功能的另一部分.
有一些具有类似断言的trap ,例如to_be_hidden
,在 compose 本文时,它的名称有点误导性,因为即使没有附加元素,它也会通过.详细分析请参阅this answer(您必须忽略其否决票--可能是报复性否决票.这是我所知的对行为差异的唯一彻底治疗).