Ruby-Capybara Page load Wait [Чтобы настроить метод в среде встраивания Ruby-Capybara-Selenium-Cucumber для веб-автоматизации] - PullRequest
0 голосов
/ 17 мая 2018

Мне нужно рассчитать Время рендеринга веб-страницы для каждой навигации с помощью в среде автоматизации, созданной с использованием embeded [ Ruby-capybara-selenium-cucumber ].некоторые веб-страницы разрабатываются с помощью 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

Но, согласно логике, он не дает полного времени рендеринга страницы, вместо этого
мгновенно при нажатии показывается время, которое выводится перед
рендеринг страниц / DOM завершен.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Это работает для меня.

вычисления с использованием 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
0 голосов
/ 17 мая 2018

При использовании Capybara нет никакой гарантии, что страница полностью загружена (что бы это ни значило), когда посещение возвращается, и нет никакой гарантии, что какие-либо действия, вызванные нажатием на элемент, завершились (или даже начались) после его возвращения.Это потому, что Capybara ничего не знает о состоянии страницы, кроме того, что «браузер» сообщает, что он виден на странице.Использование только Капибары - лучшее, что вы можете сделать для времени - это время между тем, когда вы говорите браузеру что-то сделать, и временем, которое элемент, ожидаемый на странице, когда «загружен», появляется на странице.В вашем случае это означало бы что-то вроде этого

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 мс между каждой попыткой.Также обратите внимание, что xpath SIGNIN_BTN и VERIFY_BTN теперь начинаются с .// - Вы должны привыкнуть к запуску всех xpath, используемых с Capybara, с .// вместо //, если только вам действительно не нужно // и понимать разницу (это нарушает область видимости настраницы) - https://github.com/teamcapybara/capybara#beware-the-xpath--trap

...