本篇文章以Java语言+Chrome浏览器为示例,讲述Selenium基本操作。
selenium官方解释叫:Web Browser Automation,也就是Web浏览器自动化。主要用于进行浏览器端的自动化测试。当然,在其他工具的帮助下,也可以实现如安卓、IOS等平台的测试。
比如利用selenium+appium,就可以对安卓和IOS手机进行自动化测试。
另外呢,selenium也可以用来做爬虫——通过selenium操作浏览器,获取网页源码,或者基于fiddler来实现自动抓包等。
下面我们直接进入selenium应用吧。
首先需要下载chromedriver.exe,可以到以下地址进行下载:http://npm.taobao.org/mirrors/chromedriver/
需要注意的是,chrome浏览器版本必须与chromedriver.exe版本匹配,可以自定百度匹配规则,下面仅给出一个参考:
Selenium的核心是WebDriver接口,我们可以透过它看到selenium可以做的事情,下面来看一下源码:
package org.openqa.selenium;
import java.net.URL;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.logging.Logs;
public interface WebDriver extends SearchContext {
void get(String var1);
String getCurrentUrl();
String getTitle();
List<WebElement> findElements(By var1);
WebElement findElement(By var1);
String getPageSource();
void close();
void quit();
Set<String> getWindowHandles();
String getWindowHandle();
WebDriver.TargetLocator switchTo();
WebDriver.Navigation navigate();
WebDriver.Options manage();
}
非常简洁明了的命名吧,只要略懂英语,甚至直接通过翻译就能够明白每个方法的作用。这里不多赘述,下面就进入实战篇吧!
下面开始编写第一个测试程序吧!
maven依赖:
<dependency>
<groupId>org.seleniumhq.seleniumgroupId>
<artifactId>selenium-apiartifactId>
<version>3.141.59version>
dependency>
<dependency>
<groupId>org.seleniumhq.seleniumgroupId>
<artifactId>selenium-chrome-driverartifactId>
<version>3.14.0version>
dependency>
selenium测试脚本:
Class Test {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "D://zfh/tools//chromedriver.exe");
WebDriver driver = new ChromeDriver();
webDriver.get("http://www.baidu.com");
CommonUtils.sleepSeconds(3);
webDriver.findElement(By.cssSelector("#kw")).sendKeys("java");
webDriver.findElement(By.cssSelector("#su")).click();
CommonUtils.sleepSeconds(5);
System.out.println(webDriver.getCurrentUrl());
}
}
场景操作WebDriver都封装好了,但还有一些需要注意的方式,网上大部分资料都是python+selenium,这里给出一些java+selenium特殊操作场景。
String js = "window.open(\"http://www.baidu.com\");";
((JavascriptExecutor) webDriver).executeScript(js);
WebElement searchElement = webDriver.findElement(By.cssSelector("#tsf"));
searchElement.sendKeys(Keys.ENTER);
下面的方法仅给出一个示例:
/**
* 移动
* @param driver
* @param element
* @param distance
* @throws InterruptedException
*/
public static void move(WebDriver driver, WebElement element, int distance) throws InterruptedException {
int xDis = distance;// distance to move
int moveX = new Random().nextInt(10) - 5;
int moveY = 1;
Actions actions = new Actions(driver);
new Actions(driver).clickAndHold(element).perform();//click and hold the moveButton
Thread.sleep(2000);//slow down
actions.moveByOffset((xDis+moveX)/2,moveY).perform();
Thread.sleep((int)(Math.random()*2000));
actions.moveByOffset((xDis+moveX)/2,moveY).perform();//double move,to slow down the move and escape check
Thread.sleep(500);
actions.release(element).perform();
}
下面给出几个利用selenium实现的自动化实例:
有关selenium的内容就讲解到这里了。个人主要是做java开发的,所以对自动化测试的研究不深,如有错误,欢迎指正。
下一篇将讲述java+selenium+appium如何实现对APP的自动化脚本。