我试图编写简单的测试。我的问题是,我想等到页面加载完成。此刻,我在等待一些元素的介绍,但那不是我真正想要的。是否有可能这样做:selenium-webdriver并等待页面加载
driver = Selenium::WebDriver.for :chrome
driver.navigate.to url
driver.wait_for_page_to_load "30000"
与Java不是问题,但如何使它与红宝石?
我试图编写简单的测试。我的问题是,我想等到页面加载完成。此刻,我在等待一些元素的介绍,但那不是我真正想要的。是否有可能这样做:selenium-webdriver并等待页面加载
driver = Selenium::WebDriver.for :chrome
driver.navigate.to url
driver.wait_for_page_to_load "30000"
与Java不是问题,但如何使它与红宝石?
这是Selenium docs()是如何建议:
require 'rubygems'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
driver.get "http://google.com"
element = driver.find_element :name => "q"
element.send_keys "Cheese!"
element.submit
puts "Page title is #{driver.title}"
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.until { driver.title.downcase.start_with? "cheese!" }
puts "Page title is #{driver.title}"
driver.quit
如果这不是一个选项,你可以从this SO post尝试建议,但它需要在Ruby/Rails顶端一些JavaScript。
看来wait.until
正在/已经被淘汰。新的建议过程中它来寻找网页有你认识的人将有一个元素:
expect(page).to have_selector '#main_div_id'
据我了解webdriver的,你不需要等待页面加载,因为webdriver的有blocking API但你可以确定设置页面加载超时。
driver.manage.timeouts.page_load = 10 # seconds
这再也不需要WebDriver了。
WebElement click()和Actions单击()都会自动根据需要“等待页面加载”。
如果您需要等待某些ajax内容,您可以使用imclicit和explicit(按此顺序)等待(请参阅seleniumhq)。
所以在Ruby中,无论何时使用get
来打开一个URL,ruby脚本只会在页面完全加载时才进行。
所以你的情况,你会简单地做: -
driver.get url
我也这么认为,但Webdriver文档声明 - “取决于多种因素,包括OS /浏览器组合,WebDriver可能会或可能不会等待页面加载。在某些情况下,WebDriver可能在页面完成之前返回控件,或者甚至开始加载为了确保健壮性,您需要使用显式和隐式等待来等待页面中存在的元素。 – Umang 2013-02-22 06:57:26
根据我的经验,Webdriver绝对不会一直等待所有内容加载,特别是使用AJAX加载内容时。绝对需要等待。 – bsg 2013-07-15 12:55:18
我可以用ajax加载的数据确认等待是绝对需要的。 – Kylee 2014-11-21 20:49:13
曾经发生下述情形之一AJAX或CSS的变化引起我的测试中,有时失败。我将这些方法添加到我的静态驱动程序实例,以便我可以根据需要让测试等待某些条件。 (c#)
WaitForCssChange方法中的TimedWait基本上只是一个Threading.Thread.Sleep
这不是我猜测的最美丽的方式,但它适用于我的需要。
对于Ajax等待:
public static void WaitForAjax()
{
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(25));
wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));
}
变更CSS:
public static void WaitForCssChange(IWebElement element, string value)
{
int counter = 0;
while (true)
{
if(element.GetAttribute("style").Contains(value) || counter > 50)
{
break;
}
TimedWait(20);
counter++;
}
}
我使用了您链接到这个工作对我来说硒文档的例子。非常感谢。 – chucknor 2016-04-25 10:59:24