selenium一个web应用测试工具
这里以谷歌浏览器为样例,下载谷歌浏览器对应的插件
我本机的谷歌
谷歌浏览器驱动下载链接
http://chromedriver.storage.googleapis.com/index.htmlhttp://chromedriver.storage.googleapis.com/index.htmlhttp://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/http://npm.taobao.org/mirrors/chromedriver/http://npm.taobao.org/mirrors/chromedriver/
引入maven的selenium依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.0.0</version>
</dependency>
新建java测试类,将驱动文件与当前类文件放在同目录(或修改一下代码自定目录)
模拟的是打开浏览器,最大化浏览器,在输入框输入内容进行搜索
public class BaiduTest {
private WebDriver driver;
private Map<String, Object> vars;
JavascriptExecutor js;
@Before
public void setUp() {
URL resource = BaiduTest.class.getResource("chromedriver.exe");
String path = resource.getPath();
System.setProperty("webdriver.chrome.driver", path);
driver = new ChromeDriver();
js = (JavascriptExecutor) driver;
vars = new HashMap<String, Object>();
}
@After
public void tearDown() throws InterruptedException {
Thread.sleep(3000);
driver.quit();
}
@Test
public void test() throws InterruptedException {
driver.get("https://www.baidu.com");
driver.manage().window().maximize();
Thread.sleep(2000);
driver.findElement(By.id("kw")).click();
Thread.sleep(500);
driver.findElement(By.id("kw")).sendKeys("邓霖涛");
Thread.sleep(1000);
driver.findElement(By.id("su")).click();
String pageSource = driver.getPageSource();
System.out.println(pageSource);
}
}
那一行System.out.print控制台打印,可以打印网页的内容
运行测试程序,可看见浏览器是受自动测试程序控制的
后续可以玩下selenium-ide
浏览器的插件下载链接:
下载会谷歌浏览器点击扩展程序
安装下载的插件 安装好后
可以打开它,新建项目进行用例测试
这里使用访问百度网站为例,点击开始
点击开始录制后,会新开一个浏览器,用户在该浏览器的操作将会被录制记录,或者可自行编辑每个步骤的操作命令,下图则是已经录制好的,直接点击执行进行测试
也可以导出对应的不同语言的脚本
导出的代码,可自行修改下
// Generated by Selenium IDE
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.core.IsNot.not;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Alert;
import org.openqa.selenium.Keys;
import java.util.*;
import java.net.MalformedURLException;
import java.net.URL;
public class Dlt13Test {
private WebDriver driver;
private Map<String, Object> vars;
JavascriptExecutor js;
@Before
public void setUp() {
driver = new ChromeDriver();
js = (JavascriptExecutor) driver;
vars = new HashMap<String, Object>();
}
@After
public void tearDown() {
driver.quit();
}
public String waitForWindow(int timeout) {
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
Set<String> whNow = driver.getWindowHandles();
Set<String> whThen = (Set<String>) vars.get("window_handles");
if (whNow.size() > whThen.size()) {
whNow.removeAll(whThen);
}
return whNow.iterator().next();
}
@Test
public void dlt13() {
driver.get("https://www.baidu.com/");
driver.manage().window().setSize(new Dimension(1536, 824));
driver.findElement(By.id("kw")).sendKeys("邓霖涛");
driver.findElement(By.cssSelector(".bdsug-store")).click();
vars.put("window_handles", driver.getWindowHandles());
driver.findElement(By.linkText("邓霖涛的博客_CSDN博客-鄙人Java的毕生功力,教你手写各种J...")).click();
vars.put("win4938", waitForWindow(2000));
driver.switchTo().window(vars.get("win4938").toString());
}
}
我的奇葩脑洞:
改程序原理应该是脚本启动驱动chromedriver.exe程序,脚本程序与驱动程序建立了连接,驱动开启本机的浏览器,驱动根据脚本程序发送的指令,控制了浏览器页面操作行为,浏览器的页面数据反馈通过连接反馈到脚本程序。
该工具可用来做web系统网页功能的自动化测试,可通过脚本模拟用户操作浏览器的行为,进行功能测试.
该脚本在执行中也可输出网页数据,对应也有JavascriptExecutor 等其他API可查询节点,获取节点的数据信息,可作为爬虫用来抓取一些需cookie的网页数据
对于一些网站没有提供接口让外系统接入,如:某些游戏共享账号管理,由经常的租借需经常修改密码,若租借程序无法接入游戏厂商官网系统的密码修改(解冻),可以通过此程序进行接入(不考虑性能)