收集WebDriver的执行命令和参数信息
作者:网络转载 发布时间:[ 2013/2/16 11:09:44 ] 推荐标签:
近在研究Selenium WebDriver代码,希望可以开发出一个针对WebDriver的类似LoggingSelenium 1.X的日志结果框架。
现在有了一点进步,先分享出来,等完成自己的日志框架之后,再着手建立开源、免费项目。
WebDriver的浏览器的几个实现比如InternetExplorerDriver,FirefoxDriver等都继承RemoteWebDriver类,
其中的 protected Response execute(String driverCommand, Map<String, ?> parameters)方法是执行所有的命令的
必经执行入口。如果想收集执行命令信息和相应参数,需要对该方法进行额外的小处理。本文以IE浏览器为例,首先
创建一个LoggingInternetExplorerDriver,它继承InternetExplorerDriver,并重写protected Response execute(String driverCommand, Map<String, ?> parameters)方法,
增加对执行命令和参数的处理,本文只简单的打印出命令及其参数。
LoggingInternetExplorerDriver代码例子:
packageorg.openqa.selenium.ie;importjava.util.Map;importjava.util.Map.Entry; importorg.openqa.selenium.remote.DesiredCapabilities;importorg.openqa.selenium.remote.Response;publicclassLoggingInternetExplorerDriverextendsInternetExplorerDriver{publicLoggingInternetExplorerDriver(DesiredCapabilities ieCapabilities){super(ieCapabilities);}protectedResponse execute(StringdriverCommand, Map<String,?>parameters){Response s=null;System.err.print(" 正在执行的命令为:driverCommand="+driverCommand+" 所使用的参数为parameters=");for(Entry<String,?>key:parameters.entrySet()){System.out.print(key.getKey()+"="+key.getValue()+"; ");} try{s=super.execute(driverCommand, parameters);}catch(Exceptione){e.printStackTrace();}returns; }}
编写测试代码的例子,需要注意的是,我们使用的是LoggingInternetExplorerDriver,而不是InternetExplorerDriver。
package com.loggingselenium;
import java.io.File;
import java.io.FileOutputStream;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.LoggingInternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import com.thoughtworks.selenium.*;
public class SearchWebDriver extends SeleneseTestBase {
private static WebDriver driver;
static final int MAX_TIMEOUT_IN_SECONDS = 30;
@BeforeClass
public static void setUpBeforeClass() {
//// // IE
System.setProperty("webdriver.ie.driver",
System.getProperty("user.dir") + File.separator + "resources"
+ File.separator + "IEDriverServer.exe");
DesiredCapabilities ieCapabilities = DesiredCapabilities
.internetExplorer();
ieCapabilities.setCapability(
LoggingInternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
try {
driver = new LoggingInternetExplorerDriver(ieCapabilities);
} catch (Exception e) {
e.printStackTrace();
}
String url = "http://loggingselenium.com/“;
driver.manage().window().maximize();
driver.manage().timeouts()
.implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
driver.get(url);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
if (driver != null) {
System.out.println("运行结束!");
driver.quit();
}
}
@Test
public void test() {
// LoggingSelenium网站查询输入框,输入"selenium"进行查询
String queryString = "selenium webdriver";
driver.findElement(By.xpath("//input[@name='s']"))
.sendKeys(queryString);
pause(1000);
// 单击查询按钮,执行查询
driver.findElement(By.xpath("//button[@name='searchsubmit']")).click();
pause(1000);
String title = driver.getTitle();
System.out.println("获取的页面标题:" + title);
pause(2000);
SeleneseTestBase.assertTrue(title.contains(queryString));
// 测试截图函数
captureScreenshot("截图测试JUnit");
}
/**
* fileName 保存截图的文件名
*/
private void captureScreenshot(String fileName) {
String imagePath = System.getProperty("user.dir") + File.separator
+ fileName + ".png";
try {
byte[] decodedScreenshot = ((TakesScreenshot) driver)
.getScreenshotAs(OutputType.BYTES);
FileOutputStream fos = new FileOutputStream(new File(imagePath));
fos.write(decodedScreenshot);
fos.close();
System.out.println("截图保存至" + imagePath);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行该测试类,控制台部分信息如下:
正在执行的命令为:driverCommand=maximizeWindow 所使用的参数为parameters=windowHandle=current; ms=30000;
正在执行的命令为:driverCommand=implicitlyWait 所使用的参数为parameters=
正在执行的命令为:driverCommand=get 所使用的参数为parameters=url=http://loggingselenium.com/; using=xpath; value=//input[@name='s'];
正在执行的命令为:driverCommand=findElement 所使用的参数为parameters=id=b1c8fbfb-b55d-4507-9e18-7d24a6cf51ce; value=[Ljava.lang.CharSequence;@1a99561;
正在执行的命令为:driverCommand=sendKeysToElement 所使用的参数为parameters=
正在执行的命令为:driverCommand=findElement 所使用的参数为parameters=using=xpath; value=//button[@name='searchsubmit'];
正在执行的命令为:driverCommand=clickElement 所使用的参数为parameters=id=8413f031-94ed-4bbc-a44b-f54760384735;
正在执行的命令为:driverCommand=getTitle 所使用的参数为parameters=获取的页面标题:selenium webdriver | 搜索结果 | LoggingSelenium
正在执行的命令为:driverCommand=screenshot 所使用的参数为parameters=截图保存至D:workspaceeclipseworkspaceSeleniumDemo截图测试JUnit.png
本文转载自:http://loggingselenium.com/?p=219
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11