找不到元素

时间:2016-03-16 09:16:42

标签: ruby watir watir-webdriver

我有以下代码:

if browser.ul(:class => "page-list").present? && browser.ul(:class => "page-list").lis.last.text.to_i > 1
  pages = Nokogiri::HTML.fragment(browser.ul(:class => "page-list").html).css("a").map { |link| link.text }

if语句提供true,但下一行中的browser.ul(:class => "page-list")会返回:

unable to locate element, using {:class=>\"page-list\", :tag_name=>\"ul\"}".

HTML:

<div class="page-nav">
  <a class="prev disabled" onclick="return false" href="#">
    <span><i></i></span>
  </a>
  <ul class="page-list">
    <li><span>1</span></li>
    <li><a href="javascript:submitCustomPagination('page', 2)">2</a></li>
    <li><a href="javascript:submitCustomPagination('page', 3)">3</a></li>
  </ul>
  <a class="next" href="javascript:submitCustomPagination('nextPage')">
    <span>Next<i></i>  </span>
  </a>
</div>

请解释这是如何实现的以及如何解决。

1 个答案:

答案 0 :(得分:0)

客户端可能正在重新呈现页面或列表元素(正如Justin Ko在评论中所建议的那样)。我可以建议您尝试解决此问题。

1)在IRB中一次输入一行代码。使用IRB启动浏览器,手动将其导航到所需页面,然后将代码复制粘贴到IRB命令行。由于这比运行脚本慢,这可能会暴露许多时间问题,如果你仔细观察,你有时会看到重绘等。通常在IRB中一次执行一行而不是在脚本内执行的代码是时间/同步问题的迹象。

2)添加一些调试代码来观察该元素的状态。在您拥有的两行代码之间,可能会添加类似

的内容
$scope.location=data[3].formatted_address;

如果这样的代码显示除了所有真实的东西,那么客户端javascript可能仍在更新DOM