【发布时间】:2014-02-19 20:38:37
【问题描述】:
我正在尝试使用命令if (@browser.text_field(:id => textbox).exists?) 验证页面上是否存在元素,但该命令甚至在页面加载之前执行,并且它总是转到 else 语句。我该如何处理?
【问题讨论】:
我正在尝试使用命令if (@browser.text_field(:id => textbox).exists?) 验证页面上是否存在元素,但该命令甚至在页面加载之前执行,并且它总是转到 else 语句。我该如何处理?
【问题讨论】:
在页面完成加载之前继续等待通常意味着页面正在异步加载某些内容。在这种情况下,您需要在页面实际加载完成时告诉 Watir。具体操作方式取决于页面,但通常有 2 个选项。
当异步加载内容时,许多应用程序会显示一个微调器或进度条。当这个元素消失时,页面可以被认为是“加载的”。因此,如果您的页面上有这些类型的元素之一,您可以等待它消失后再继续:
@browser.div(:id => 'spinners_id').wait_while_present
if @browser.text_field(:id => textbox).exists?
# Do stuff
else
# Do other stuff
end
或者,您知道页面上可能有一个元素是最后加载的。在这种情况下,您可以等到该元素出现:
@browser.div(:id => 'some_last_element').wait_until_present
if @browser.text_field(:id => textbox).exists?
# Do stuff
else
# Do other stuff
end
【讨论】:
@browser.text_field(:id,textbox).when_present.set "Welcome"
这将帮助您减少不需要的等待检查代码并使代码更具可读性。
【讨论】: