如何加速Ruby页面对象。可见?还是存在?检查

时间:2016-06-16 16:19:23

标签: ruby selenium selenium-webdriver page-object-gem

我正在使用Page Object Ruby gem来测试网页,并遇到了一些小的性能问题。我需要检查当前页面上是否存在元素,但是使用.visible的当前方法经历了很长的等待时间,有时候在几十秒内。或.exsits?当相关元素在页面上实际存在时,就会出现此性能问题。

html相当复杂,所以提供一个例子很困难,但这里是代码应该寻找的表格的基本格式:

<body>
  <div>
  <div>
  <div>
  ...
  <table>
    <tbody>
      <tr>
        <td>
          <a href = "#" onclick="return url_here"
        </td>
        <td class= "no wrap">Active<
        <td class= "no wrap">06/15/2016</td>
        <td class= "no wrap">06/15/2016</td>
      </tr>
      <tr>
      <tr>
     </tbody>
    <tfoot>...</tfoot>
  </table>
...

我设置了这样的元素:

table(:attributes_tbody, :xpath => "//*[@id='Form:agrAttributesTable']/tbody")

然后使用此代码检查页面上是否存在此表:

if attributes_tbody_element.visible?
  attributes_tbody_element.each do |row|
    if row[1].text == to_title_case(attribute)
      p 'EXPECTED ATTRIBUTE EXISTS'
    end
  end
end

第一次检查是需要花费最多时间的。我确实意识到这些方法有很多可以解决的问题,但我想知道是否有办法缩小搜索范围以加快这些检查的速度?在这种情况下,页面相当小,使用JSF生成,如果有帮助的话。

感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我的猜测是,它与您在脚本上设置的隐式等待有关。隐式等待将等待规定的时间,直到每次搜索元素时元素出现。因此,如果您正在寻找许多元素或检查缺少的可见性等,那么您将会遇到很多延迟。我建议你关闭隐式等待并在需要的地方添加明确的等待,例如WebDriverWait

有关显式和隐式等待的详细信息,请参阅Selenium docs

答案 1 :(得分:0)

不确定您是否以及如何解决您的问题,所以这里......

您可以使用Page-Object定义默认页面和元素等待时间 PageObject.default_page_wait和PageObject.default_element_wait并使用element_wait方法进行跟进。

默认等待已经有page,对元素等待方法here有很好的解释。

此外,Page-Object“方式”不是使用xpath,而是在答案here中定义父元素然后定义子元素。

你的桌子会是这样的:

table(:ur_tbl, :id =>'Form:agrAttributesTable')
ur_tbl.when_present(time_to_wait)
ur_tbl_element[0][1].when_present(time_to_wait) 

//使用单元格,但也可以使用其他元素

对于您的情况,您还可以将默认元素设置为等待高,然后在您的逻辑后恢复以验证元素是否完整。

您可能需要稍微额外的逻辑的一种情况是,在执行加载操作之前数据已经存在于表中。我认为应用程序在此期间应该有一个页面加载器或覆盖元素,应该进行验证。