2015-11-02 43 views
1

对于一个教学项目,我想算教训元素的下页号:https://www.edx.org/course/subject/computer-science如何访问从有限的滚动元件与水豚/骚灵和Rails

我使用的骚灵作为一个网络驱动程序访问该页面,但由于页面正在使用JavaScript函数在页面加载后添加更多的条目,当用户向下滚动时,我需要用Poltergeist复制它。

我曾尝试使用向下滚动:

evaluate_script( “page.scrollPosition = {顶部:page.scrollPosition + 1000,左:0};”)

execute_script( “page.scrollPosition = {top:page.scrollPosition + 1000,left:0};”)

它似乎没有工作。

Poltergeist是否有任何方式进入页面底部,以便JavaScript加载(in)有限循环中的所有元素? 加载后,它们很容易计数。

+0

http://www.osmonov.com/2013/02/how-to-scroll-with-capybara-and.html –

+0

试过之前,但似乎并不滚动以显示新元素。我在Poltergeist中截取屏幕截图,并且在执行代码后不显示新元素,甚至包括之后的“睡眠5”。 – Thrabbit

回答

2

execute_script是所谓的“浏览器”执行JavaScript - 我不知道“页”的对象你要设置的值上,但你可能想要的东西更像

execute_script('window.scroll(0,1000);') 

作为一个更完整的例子

@session.visit 'https://www.edx.org/course/subject/computer-science' 
count = @session.all(:css, '.discovery-card', minimum: 1).length() 
puts "there are #{count} discovery cards" 
@session.execute_script('window.scroll(0,1000);') 
new_count = @session.all(:css, '.discovery-card', minimum: count+1, wait: 30).length() 
puts "there are now #{new_count} discovery cards" 
+0

尝试了以下代码:'browser = Capybara.current_session browser.visit“https://www.edx.org/course/subject/computer-science” browser.execute_script('window.scroll(0,2500); ') sleep 5 browser.save_screenshot('app/file1.png',full:true)'获得新元素没有运气 – Thrabbit

+0

首先,您应该在调用execute_script之前检查页面上的内容 - 因为可以访问是完全异步的 - 其次,你不应该使用睡眠 - 只需检查页面上的新元素 - 我已经添加了一个更完整的示例 - 第一次调用#all将等待最初的元素,因为最小值:1选项,然后滚动后调用#all等待新元素,因为最小值:count +1选项 –

+0

是合理的。感谢那! – Thrabbit