Ruby-Capybara Page load Wait [在 Ruby-Capybara-Selenium-Cucumber 嵌入式框架中设置一个方法用于 web 自动化]
Ruby-Capybara Page load Wait [ To set up a method in Ruby-Capybara-Selenium-Cucumber embeded framework for a web Automation]
我必须在使用嵌入式[Ruby-capybara-selenium 创建的自动化框架中计算每次导航的网页渲染时间 -黄瓜]。
一些网页 Ajax 已开发。
#Xpath
SIGNIN_BTN = "//div/button[contains(.,'Sign In')]"
VERIFY_BTN = "//div/button[contains(.,'NEXTBUTTON')]"
t1 = Time.now
visit "http://google.com"
t2 = Time.now
pageloadtime1 = t2-t1
puts pageloadtime1
t3 = Time.now
find(:xpath, SIGNIN_BTN).click
t4 = Time.now
pageloadtime2 = t4-t3
puts pageloadtime2
t5 = Time.now
find(:xpath, VERIFY_BTN ).click
t6 = Time.now
pageloadtime3 = t6-t5
puts pageloadtime3
但按照逻辑,它没有给出完整的页面呈现时间,
而不是立即单击,时间在
之前作为输出给出
page-rendering/DOM已完成。
使用 Capybara 时,无法保证访问 returns 时页面已完全加载(无论那意味着什么),也无法保证通过单击元素触发的任何操作已完成(甚至开始)当它 returns。这是因为除了 "browser" 告诉它在页面上可见的内容之外,Capybara 对页面状态一无所知。仅使用 Capybara,您可以为计时做的最好的事情是您告诉浏览器做某事与元素(预计在 "loaded" 出现在页面上的时间)之间的时间。在你的例子中,这意味着像这样
SIGNIN_BTN = ".//div/button[contains(.,'Sign In')]"
VERIFY_BTN = ".//div/button[contains(.,'NEXTBUTTON')]"
t1 = Time.now
visit "http://google.com"
signin_btn = find(:xpath, SIGNIN_BTN) # wait until signin button is visible on page
t2 = Time.now
pageloadtime1 = t2-t1
puts pageloadtime1
t3 = Time.now
signin_btn.click
verify_btn = find(:xpath, VERIFY_BTN ) # wait until the verify button is visible on page
t4 = Time.now
pageloadtime2 = t4-t3
puts pageloadtime2
t5 = Time.now
verify_btn.click
something = find(:xpath, './/xpath of something visible on page when action has completed')
t6 = Time.now
pageloadtime3 = t6-t5
puts pageloadtime3
注意,这些测量都将包括一些开销,因为尝试查找元素时的等待行为有开销,并且每次尝试之间有 50 毫秒的延迟。还要注意 SIGNIN_BTN 和 VERIFY_BTN xpaths 现在以 .//
开头 - 你应该习惯以 .//
而不是 //
开始所有与 Capybara 一起使用的 xpaths 除非你确实需要 //
并理解其中的区别(它破坏了页面上的范围)- https://github.com/teamcapybara/capybara#beware-the-xpath--trap
这对我有用。
使用 Ruby 和 Jscript 进行计算 - document.readyState,创建一个通用方法并调用它。
SIGNIN_BTN = "//div/button[contains(.,'Sign In')]"
NEXT_BTN = "//div/button[contains(.,'NEXTBUTTON')]"
visit "https://gmail.com/"
timewait = pagetime_time
puts "LAUNCH GMAIL | PAGELOAD TIME :#{timewait}"
find(:xpath, SIGNIN_BTN).click
timewait = pagetime_time
puts "SIGN IN GMAIL | PAGELOAD TIME :#{timewait}"
find(:xpath, NEXT_BTN ).click
timewait = pagetime_time
puts "NEXT GMAIL | PAGELOAD TIME :#{timewait}"
def pagetime_time
time1 = Time.now
timeloop = 0
while timeloop < 500
if (Capybara.current_session.driver.execute_script('var browserState = document.readyState; return browserState;') == 'complete')
time2 = Time.now
break
end
timeloop + 1
end
timeWait = (time2 - time1) * 1000
return timeWait
end
我必须在使用嵌入式[Ruby-capybara-selenium 创建的自动化框架中计算每次导航的网页渲染时间 -黄瓜]。 一些网页 Ajax 已开发。
#Xpath
SIGNIN_BTN = "//div/button[contains(.,'Sign In')]"
VERIFY_BTN = "//div/button[contains(.,'NEXTBUTTON')]"
t1 = Time.now
visit "http://google.com"
t2 = Time.now
pageloadtime1 = t2-t1
puts pageloadtime1
t3 = Time.now
find(:xpath, SIGNIN_BTN).click
t4 = Time.now
pageloadtime2 = t4-t3
puts pageloadtime2
t5 = Time.now
find(:xpath, VERIFY_BTN ).click
t6 = Time.now
pageloadtime3 = t6-t5
puts pageloadtime3
但按照逻辑,它没有给出完整的页面呈现时间,
而不是立即单击,时间在
之前作为输出给出
page-rendering/DOM已完成。
使用 Capybara 时,无法保证访问 returns 时页面已完全加载(无论那意味着什么),也无法保证通过单击元素触发的任何操作已完成(甚至开始)当它 returns。这是因为除了 "browser" 告诉它在页面上可见的内容之外,Capybara 对页面状态一无所知。仅使用 Capybara,您可以为计时做的最好的事情是您告诉浏览器做某事与元素(预计在 "loaded" 出现在页面上的时间)之间的时间。在你的例子中,这意味着像这样
SIGNIN_BTN = ".//div/button[contains(.,'Sign In')]"
VERIFY_BTN = ".//div/button[contains(.,'NEXTBUTTON')]"
t1 = Time.now
visit "http://google.com"
signin_btn = find(:xpath, SIGNIN_BTN) # wait until signin button is visible on page
t2 = Time.now
pageloadtime1 = t2-t1
puts pageloadtime1
t3 = Time.now
signin_btn.click
verify_btn = find(:xpath, VERIFY_BTN ) # wait until the verify button is visible on page
t4 = Time.now
pageloadtime2 = t4-t3
puts pageloadtime2
t5 = Time.now
verify_btn.click
something = find(:xpath, './/xpath of something visible on page when action has completed')
t6 = Time.now
pageloadtime3 = t6-t5
puts pageloadtime3
注意,这些测量都将包括一些开销,因为尝试查找元素时的等待行为有开销,并且每次尝试之间有 50 毫秒的延迟。还要注意 SIGNIN_BTN 和 VERIFY_BTN xpaths 现在以 .//
开头 - 你应该习惯以 .//
而不是 //
开始所有与 Capybara 一起使用的 xpaths 除非你确实需要 //
并理解其中的区别(它破坏了页面上的范围)- https://github.com/teamcapybara/capybara#beware-the-xpath--trap
这对我有用。
使用 Ruby 和 Jscript 进行计算 - document.readyState,创建一个通用方法并调用它。
SIGNIN_BTN = "//div/button[contains(.,'Sign In')]"
NEXT_BTN = "//div/button[contains(.,'NEXTBUTTON')]"
visit "https://gmail.com/"
timewait = pagetime_time
puts "LAUNCH GMAIL | PAGELOAD TIME :#{timewait}"
find(:xpath, SIGNIN_BTN).click
timewait = pagetime_time
puts "SIGN IN GMAIL | PAGELOAD TIME :#{timewait}"
find(:xpath, NEXT_BTN ).click
timewait = pagetime_time
puts "NEXT GMAIL | PAGELOAD TIME :#{timewait}"
def pagetime_time
time1 = Time.now
timeloop = 0
while timeloop < 500
if (Capybara.current_session.driver.execute_script('var browserState = document.readyState; return browserState;') == 'complete')
time2 = Time.now
break
end
timeloop + 1
end
timeWait = (time2 - time1) * 1000
return timeWait
end