Selenium webdriver的高级用法
来源:互联网 发布:rotor gene q软件 编辑:程序博客网 时间:2024/06/05 05:31
WebDriver: 高级用法
显式和隐式等待
等待是在执行下一步之前让自动化任务等上一定量的时间。
显示等待
一个显式等待就是在继续执行代码之前编码等待定义一个特定条件发生。最糟糕的例子是Thread.sleep(),这设置了一个明确的等待时间。WebDriver提供了一些方便的方法来帮助您的代码来等待要求的时间。WebDriverWait和ExpectedCondition的结合就是一种实现的方法。
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"));
}});
在抛出TimeoutException之前它会等待最多10秒钟,或者如果它找到了元素就在0-10秒之间返回。WebDriverWait默认每500毫秒调用ExpectedCondition直到它成功返回。ExpectedCondition类型的成功返回是布尔值true或非null的返回值。
ExpectedConditions
自动化web浏览器时有一些常用的条件。下面列出的是每个实现。Java库中恰巧有方便的方法,因此您不需要编写一个ExpectedCondition类或为它们创建自己的实用程序。
l 元素可点击 – 元素显示并且可用。
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
ExpectedConditions 类中包含了一组与定义条件,可用于WebDriverWait
隐式等待
隐式等待告诉WebDriver一段特定的时间轮询一下DOM,来查找一个元素或者元素组,如果它们没有马上找到的话。默认设置是0。一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。
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"));
RemoteWebDriver
截屏
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);
}
}
使用FirefoxProfile
FirefoxProfile fp = new FirefoxProfile();
// set something on the profile...
DesiredCapabilities dc = DesiredCapabilities.firefox();
dc.setCapability(FirefoxDriver.PROFILE, fp);
WebDriver driver = new RemoteWebDriver(dc);
使用ChromeOptions
ChromeOptions options = new ChromeOptions();
// set some options
DesiredCapabilities dc = DesiredCapabilities.chrome();
dc.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new RemoteWebDriver(dc);
高级用户交互
Actions类允许你创建一个Actions的链然后执行它们。组合的数量可能多得数不清。以下是一些您可能想要使用的常用的交互。对于完整的Action,请参看API文档JavaC# Ruby Python
高级用户交互要求启用native events。这是目前支持的native events的矩阵:
platform
IE6
IE7
IE8
IE9
FF3.6
FF10+
Chrome stable
Chrome beta
Chrome dev
Opera
Android
iOS
Windows XP
Y
Y
Y
n/a
Y
Y
Y
Y
Y
?
Y [1]
n/a
Windows 7
n/a
n/a
Y
Y
Y
Y
Y
Y
Y
?
Y [1]
n/a
Linux (Ubuntu)
n/a
n/a
n/a
n/a
Y [2]
Y [2]
Y
Y
Y
?
Y [1]
n/a
Mac OSX
n/a
n/a
n/a
n/a
N
N
Y
Y
Y
?
Y [1]
N
Mobile Device
n/a
n/a
n/a
n/a
n/a
?
n/a
n/a
n/a
?
Y
N
[1]
(1,2,3,4) Using the emulator
[2]
(1,2) With explicitly enabling native events
浏览器启动操作
使用代理
Internet Explorer
最简单和推荐的方法是在运行测试的机器中手工设置代理。如果不可能,或者你想让你的测试运行在不同的配置或者代理中,那么你需要使用以下技巧来使用一个Capabilities对象。这会暂时改变系统的代理设置,在测试结束后再改回原来的设置。
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
基本上与IE相同。它与IE一样,使用相同的配置(Windows)。在Mac中,使用System Preference->Network settings。在Linux使用System>Preferences>Network Proxy Preferences(或者/tec/environment设置http_proxy)
Firefox
Firefox用一个proxy来维护代理配置。你可以在一个profile中预先设置一个proxy,然后使用这个Profile。或者你也可以随机生成一个Profile,然后设置代理,如下例子:
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);
- Selenium webdriver的高级用法
- Selenium WebDriver高级用法 - 选择合适的WebDrvier
- Selenium用户指南 - 第五章 WebDriver: 高级用法
- Selenium用户指南 - 第五章 WebDriver: 高级用法
- selenium webdriver (python)的基本用法
- selenium webdriver的各种driver
- Selenium WebDriver的操作说明
- selenium及webdriver的原理
- selenium+webdriver的学习地址
- selenium及webdriver的原理
- selenium webdriver的各种driver
- selenium webdriver的各种driver
- selenium webdriver的断言介绍
- selenium webdriver重写的方法
- selenium webdriver的各种driver
- 关于Selenium WebDriver的geckodriver
- selenium WebDriver的简单使用
- Selenium WebDriver
- sql语句 IF函数的用法
- Make 使用自动变量
- 友元函数(类中的成员函数作为友元函数)
- linux date 格式化时间和日期
- n个骰子朝上面所有和的概率
- Selenium webdriver的高级用法
- 二、存储器和寄存器简介
- android OTA 升级
- 题目1523:从上往下打印二叉树
- 【解法】给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
- shell之crontab
- WinCE 的线程问题
- 触发器中的inserted和deleted、update
- 全局变量、局部变量、静态全局变量、静态局部变量的区别 .