Watir Webdriver等待页面加载

时间:2015-02-18 12:58:58

标签: webdriver watir watir-webdriver

如何使用watir webdriver检查页面是否已加载?

当我用Google搜索时,我发现许多人建议检查一个特定元素,该元素只有在加载页面后才会出现。这对我的要求没有帮助,因为当我更改列表框的值并且不会将我带到新页面时会发生页面加载。在此页面加载后,元素和大多数值保持相同。因此我需要像selenium RC中的waitForPage。

我的情景 1.页面中有三个列表框(A,B,C) 2.当我更改列表A中的值时,会发生页面加载(这将更新列表框C的值。这些值是动态的。) 3.然后我必须更改列表框B中的值。

在上面的场景中,如果我在步骤2之后检查了一个List B元素,它表示该元素存在,但在更改值时,它表示该元素不存在则失败

$browser.frame.select_list(:id,"listA").select("aaa")
while !$browser.frame.select_list(:id,"listA").exists? && i<=20
    sleep 1
     i+=1
end
raise "Element not found" if i > 20
i=1
while !$browser.frame.select_list(:id,"listA").include?("bbb") && i<=20
    sleep 1
    i+=1
end
raise "Option not found" if i > 20
$browser.frame.select_list(:id,"listB").select("bbb")

在检查列表B中是否存在选项或更改列表B的值时,脚本失败,找不到元素异常

2 个答案:

答案 0 :(得分:0)

尝试选择id等于“listB”的所有元素,迭代它们并检查特定元素是否可见。我并不特别记得在watir中它应该是什么样的,我认为这样的事情是这样的:

$browser.frame.select_lists(:id,"listB").each do |list|
    if list.visible?
        list.select("bbb")
        break
    end
end

答案 1 :(得分:0)

如果您正在查看整页重新加载,并且没有AJAX正在进行(这些天很少,趋势是客户端呈现),那么在点击链接或提交表单后自动等待页面加载应该工作。使用开发人员工具观察网络流量将告诉您页面是否实际上正在进行真正的重新加载,或者只是看起来就像客户端js重新呈现页面时那样。

如果您遇到AJAX请求,其中提交是通过对某些服务的javascript请求(通常是REST服务)以及页面的一部分更新来处理的,那么您可以执行以下操作。

  1. 使用.when_present方法装饰调用您正在等待的元素的代码。例如:

    $ browser.frame.select_list(:ID,&#34;数组listB&#34)。when_present.select(&#34; BBB&#34)

  2. 如果您的客户端代码使用jQuery,您可以构造一个帮助方法,使用Watir::Wait.until等待browser.execute_script('return jQuery.active == 0')为真,并保持这种方式一段时间。 (.active是等待响应的活动jQuery请求的计数)

  3. 与其他建议类似,等待特定页面元素出现。

  4. 结合上述内容,做#2后跟其中一个。