WebDriver:高级用法
显式和隐含等待
等待是让自动化任务的执行,先于继续到下一个步骤,推移一定数量的时间。
显式等待
显式等待是,先于代码的继续执行,而定义的等待某个条件发生的代码。最糟糕的情况是Thread.sleep(),设置条件为一个需要等待的精确时间段。有一些提供的便利方法,可以帮助你编写代码仅仅等待需要的时间。WebDriverWait与ExpectedCondition的结合是一种可以完成这个目标的方式。
Java
WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("myDynamicElement"));
}});
C#
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.Id("someDynamicElement"));
});
这将等待最多10秒先于抛出一个TimeoutException ,或者如果找到这个元素,则将在0 - 10秒内返回。WebDriverWait默认每隔500毫秒调用ExpectedCondition直到它成功返回。
此示例与第一个隐含等待示例在功能上等价。
隐含等待
一个隐含等待告诉WebDriver去轮询DOM一段时间,当试图查找不是立即可得到的一个或多个元素时。默认的设置是0。一旦设置,隐含等待将具有WebDriver对象实例的生存期。
Java
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));
C#
WebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
driver.Url = "http://somedomain/url_that_delays_loading";
IWebElement myDynamicElement = driver.FindElement(By.Id("someDynamicElement"));
远程WebDriver
捕获一个截图
Java
import java.io.File;
import java.net.URL;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
public class Testing {
public void myTest() throws Exception {
WebDriver driver = new RemoteWebDriver(
new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox());
driver.get("http://www.google.com");
// RemoteWebDriver does not implement the TakesScreenshot class
// if the driver does have the Capabilities to take a screenshot
// then Augmenter will add the TakesScreenshot methods to the instance
WebDriver augmentedDriver = new Augmenter().augment(driver);
File screenshot = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE);
}
}
C#
// Add this class to your code and use this instead of RemoteWebDriver
// You will then be able to cast it to ITakesScreenshot and call GetScreenshot
public class ScreenShotRemoteWebDriver : RemoteWebDriver, ITakesScreenshot
{
public ScreenShotRemoteWebDriver(Uri RemoteAdress, ICapabilities capabilities)
: base(RemoteAdress, capabilities)
{
}
/// <summary>
/// Gets a <see cref="Screenshot"/> object representing the image of the page on the screen.
/// </summary>
/// <returns>A <see cref="Screenshot"/> object containing the image.</returns>
public Screenshot GetScreenshot()
{
// Get the screenshot as base64.
Response screenshotResponse = this.Execute(DriverCommand.Screenshot, null);
string base64 = screenshotResponse.Value.ToString();
// ... and convert it.
return new Screenshot(base64);
}
}
// And then the usage would be:
ScreenShotRemoteWebDriver webDriver = new ScreenShotRemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), DesiredCapabilities.Firefox());
// ... do stuff with webDriver
Screenshot ss = ((ITakesScreenshot)webDriver).GetScreenshot();
string screenshot = ss.AsBase64EncodedString;
byte[] screenshotAsByteArray = ss.AsByteArray;
ss.SaveAsFile(activeDir + TestSuiteName + "//" + FileNanme + imageFormat, ImageFormat.Jpeg);
高级用户交互
Todo
浏览器启动管理
Todo
包含的主题:
- 恢复cookie
- 改变Firefoxe配置文件
- 运行带插件的浏览器
使用代理
Internet Explorer
最容易和推荐的方式是在即将运行测试的机器上手工设置代理。如果那是不可能的或你希望测试运行带有一个不同的配置或代理,则你可以使用Capababilities 对象,应用下面的技术。这将临时地改变系统的代理设置,并且当完成时改变回最初的状态。
String PROXY = "localhost:8080";
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy(PROXY)
.setFtpProxy(PROXY)
.setSslProxy(PROXY);
DesiredCapabilities cap = new DesiredCapabailities();
cap.setPreference(CapabilityType.PROXY, proxy);
WebDriver driver = new InternetExplorerDriver(cap);
Chrome
基本上与internet explorer是相同的。在windows,Chrome使用机器上与IE相同的配置。在Mac,Chrome使用系统首选项-〉网络设置(System Preference -> Network settings)。在Linux(Ubuntu),Chrome使用系统-〉首选项-〉网络代理首选项( System > Preferences > Network Proxy Preferences ),可选地在““/etc/environment”设置http_proxy。本文档编写时,还不知道如何编程地设置代理。
Firefox
Firefox维护代理配置在一个概要文件中。你可以预置代理在概要文件中,然后使用这个Firefox概要,或者你可以在行进中设置在概要中,正如下面的示例所显示的。
String PROXY = "localhost:8080";
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy(PROXY)
.setFtpProxy(PROXY)
.setSslProxy(PROXY);
DesiredCapabilities cap = new DesiredCapabailities();
cap.setPreference(CapabilityType.PROXY, proxy);
WebDriver driver = new FirefoxDriver(cap);
Opera
Todo
HTML5
Todo
并行运行你的测试
Todo
© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.
分享到:
相关推荐
selenium-webdriver-2.40.0.gem
selenium-webdriver-2.45.0.gem
WebtestRecorder插件---Selenium Webdriver脚本录制工具--For Java
selenium-webdriver原创selenium-webdriver原创selenium-webdriver原创selenium-webdriver原创
selenium-webdriver-2.5.0.gem
Selenium-WebDriver-Java Selenium-WebDriver-Java的示例
selenium-server-standalone-2.40.0.jar 、selenium-java-2.40.0-srcs.jar 、selenium-java-2.40.0.jar
1. Download the latest version of Selenium RC 2. Unzip the file save it C:\selenium-remote-control-1.0.3 3. command prompt>java -version –> Version should grater than 1.6.0_5 4. command prompt go to ...
selenium-java-2.44.0.jar selenium-java-2.44.0-srcs.jar selenium-server-standalone-2.44.0.jar
博客“ruby+selenium-webdriver测试--第一个例子源代码”
selenium-dotnet-3.5.2 C#,两个版本NET35和NET4,dll文件直接调用........
selenium-java-2.45.0.jar
WIN7-Selenium2(WebDriver)-Python环境搭建指南 一、 安装Python 版本选择:目前由于Python2.x使用更加广泛,且支持的包与库函数更加丰富,所以建议选择Python2.7版本。下载地址:www.python.org 安装:参考附件 二...
Laravel开发-phpunit-selenium-webdriver WebDriver支持使用Fluent测试API的phpunit Selenium测试用例。
selenium-webdriver-api文档,chm格式,使用webdriver必备查询工具
selenium-server-standalone-4.0.0-alpha-2.zip
selenium-java-2.41.0,selenium-java-2.33 完整包下载
Selenium 服务器(selenium-server-4.1.1.jar)
最新版selenium-java,selenium-server-standalone-3.141.0.jar
selenium-server-standalone-2.44.0, selenium最新服务器,