【问题标题】:Watir Webdriver wait for page to loadWatir Webdriver 等待页面加载
【发布时间】:2015-02-18 12:58:58
【问题描述】:

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

当我用谷歌搜索时,我发现很多人建议检查特定元素,该元素仅在页面加载后才会出现。这对我的要求没有帮助,因为当我更改列表框的值时会发生页面加载,并且不会将我带到新页面。此页面加载后,元素和大部分值保持不变。因此我需要 selenium RC 中的 waitForPage 之类的东西。

我的场景 1.一个页面有3个列表框(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. 当我更改列表 A 中的值时,会发生页面加载" - 这是什么意思?是否有某种 ajax 请求?
  • 没有 smooyk。这不是一个 ajax 请求。整个页面再次加载。这是一个使用 POST 方法提交的表单
  • 好像更新List A会刷新页面来更新List C的选项,你有没有试过等到List C更新?该代码似乎只对列表 A 进行检查。
  • 编辑您提出的错误中的文本,以消除两条消息的歧义,从而更清楚哪个步骤失败

标签: webdriver watir watir-webdriver


【解决方案1】:

如果您确实在查看完整页面重新加载,并且没有 AJAX 进行(现在很少见,趋势是客户端渲染),那么在单击链接或提交表单后,watir 会自动等待页面加载应该工作。使用开发者工具观察网络流量会告诉你页面是否真的在进行真正的重新加载,或者它只是在视觉上看起来就像客户端 js 重新渲染页面时的情况。

如果您遇到 AJAX 请求,其中提交由对某些服务(通常是 REST 服务)的 javascript 请求处理,并且页面的一部分已更新,您可以做一些事情。

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

    $browser.frame.select_list(:id,"listB").when_present.select("bbb")

  2. 1234563 (.active 是等待响应的活跃 jQuery 请求的计数)
  3. 与其他建议类似,等待特定页面元素出现。

  4. 结合以上,做#2,然后做其他之一。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回复。但这对我没有用。该元素在进入页面之前就存在(看起来此代码在页面开始加载之前执行)。在检查可见性或选择时进入do块后,它会抛出元素未找到异常
    • 没有实际的 html 代码很难说,但是您可以尝试以下操作,因为页面已完全重新加载:更改代码中 listA 的值后,等待元素 listB 消失,然后休眠一小段时间时间量(例如 1,2 秒)并等待 listB 出现,我将这种方法用于带有大量 ajax 的单页应用程序,它对我来说很有效。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2018-03-07
    • 2013-09-09
    • 2012-07-07
    • 1970-01-01
    • 2012-05-11
    • 2011-12-11
    • 2014-05-20
    相关资源
    最近更新 更多