我有以下代码:
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>
请解释这是如何实现的以及如何解决。
答案 0 :(得分:0)
客户端可能正在重新呈现页面或列表元素(正如Justin Ko在评论中所建议的那样)。我可以建议您尝试解决此问题。
1)在IRB中一次输入一行代码。使用IRB启动浏览器,手动将其导航到所需页面,然后将代码复制粘贴到IRB命令行。由于这比运行脚本慢,这可能会暴露许多时间问题,如果你仔细观察,你有时会看到重绘等。通常在IRB中一次执行一行而不是在脚本内执行的代码是时间/同步问题的迹象。
2)添加一些调试代码来观察该元素的状态。在您拥有的两行代码之间,可能会添加类似
的内容$scope.location=data[3].formatted_address;
如果这样的代码显示除了所有真实的东西,那么客户端javascript可能仍在更新DOM