【问题标题】:How to monitor changing elements with Watir?如何使用 Watir 监控变化的元素?
【发布时间】:2011-12-06 08:49:25
【问题描述】:

我正在测试一个网页,该网页的特定 div 每隔一分钟左右就会发生变化,我想运行一个测试以确保它实际上是在变化而不是卡住。理想情况下,我想永久(或至少长时间)运行它。这是用 Watir 可以完成的事情吗?有没有更好的工具来完成这项工作?

这是正在发生的事情的一个示例:

<div class="widgets ui-scrollview-view" style="overflow: hidden; left: -11475px; top: 0px; width: 12150px;">
    <div id="main1" class="some_class">
    <div id="main2" class="some_other_class">
</div>

main2 div 是正在显示的...每次有更新时,新的 div id 都会增加,旧的 div 会向上移动(例如,显示 main3,main2 向上移动,而 main1 不再显示在 html 中)。所以一段时间后它可能看起来像:

<div class="widgets ui-scrollview-view" style="overflow: hidden; left: -1350px; top: 0px; width: 2025px;">
    <div id="main2" class="some_class">
    <div id="main3" class="some_other_class">
</div> 

我想确保在一段合理的时间后生成新的 div。

【问题讨论】:

  • 除非您向我们提供更多详细信息,例如一些示例 HTML,以及该 div 正在发生什么变化的想法,否则您的答案将非常笼统且不具体。是 div 的内容发生了变化,还是 div 的属性发生了变化?等
  • 感谢您的建议,感谢您帮助我!我已经用一些示例 html 更新了原始问题
  • 根据您的描述,有几个潜在的解决方案,但如果您有一致的方法来识别包含将要更改的容器 div 的容器 div,它们会变得更容易。您可以将该详细信息添加到您发布的示例 HTML 中吗?如果这是不可能的,那么其他人的 ID 是否有一些独特的模式,这些模式与页面上的其他 div 不同。 (所以你可以通过正则表达式得到它们)例如在您的示例中,只要 'main' 在任何其他 id 值中都没有出现,那么就可以使用它。
  • 好的,用示例 div 更新了 HTML sn-p。类不会改变,但样式值有时会改变。
  • 更新了我的答案,使其更具体地针对您提供的示例 HTML 详细信息。

标签: watir


【解决方案1】:

如果是像类这样的属性正在改变。并且您还有其他一些可用于识别对象的属性,那么您可以使用.attribute_value method 来检查您感兴趣的属性并查看它当前设置的内容。

例如(编辑以反映问题的变化)

browser.goto("PageYouWantToMonitor")
1000.times do |i|
  puts "sample Number #{i}"
  puts "First div ID is: #{browser.div(:class => 'widgets ui-scrollview-view').div(:index => 0).attribute_value('id')}"
  puts "Second div ID is: #{browser.div(:class => 'widgets ui-scrollview-view').div(:index => 1).attribute_value('id')}"
  sleep 30
end

简单的例子,虽然对于长时间的测试,写出带有时间戳加上值的某种日志文件可能更有用。 Ruby 内置了一些非常有用的日期/时间库以及文件 IO,通过谷歌搜索应该可以找到关于它们的一些基本教程。

【讨论】:

    【解决方案2】:

    您可以使用 Watir 运行测试,只要您愿意。请注意,我不太确定任何浏览器都可以永久运行。 :)

    问题是,你怎么知道要检查哪个 div?有什么保持不变的吗?像往常一样,用 2-3 个例子来说明 div 的变化会有什么帮助。

    例如:

    <div id="change">one</div>
    

    更改为

    <div id="change">two</div>
    

    然后去

    <div id="change">three</div>
    

    我会很容易检查 div 文本

    browser.div(:id => "change").text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2010-10-13
      • 2013-03-01
      • 1970-01-01
      • 2013-06-02
      • 2012-11-02
      相关资源
      最近更新 更多