Selenium工作原理
Selenium2.0用到webdriver,the webdriver wireless protocol,以HTTP为基础的协议,通过post方法与server通信操作浏览器。
Selenium工作原理
Webdriver驱动原理:Webdriver会将对应的浏览器绑定在特定端口启动,并作为一个服务器监听来自于测试脚本的命令,selenium测试脚本通过调用该服务操作本机安装的相应的浏览器。
webdriver可以理解成为一个服务端或者是一个桥梁,用于建立起脚本和浏览器之间的联系,webdriver本身是基于浏览器内核来开发的,所以,webdriver和浏览器有着强配套关系。
Selenium环境搭建
引入Selenium Jar
可以通过使用maven管理或者非maven项目直接引入jar包
Maven管理:
从maven仓库https://mvnrepository.com/中搜索selenium,将dependency依赖添加到pom文件中即可。
配置webdriver驱动器
目前市面主流的浏览器都针对selenium开发了对应的webdriver驱动器,因而需要下载和浏览器版本对应的webdriver.exe文件。
chromedriver依然推荐在淘宝镜像下载。http://npm.taobao.org/mirrors/chromedriver/
设置浏览器启动路径
要进行自动化测试,我们需要调用不同浏览器以及对应的webdriver驱动器进行操作,因此需要向脚本指定浏览器和webdriver的启动路径。
Chrome浏览器和IE浏览器通常会自动安装在默认位置,不需要指定浏览器启动路径。
Firefox浏览器通过
System.setProperty(“webdriver.firefox.bin”, “火狐安装路径”);进行指定
设置webdriver启动路径
Webdriver启动路径可以通过指定绝对路径的方式指定,也可以将webdriver.exe拷贝到项目路径中,通过相对路径指定,建议使用相对路径,方便后期打包。
通过System.setProperty(“webdriver.gecko.driver”, “火狐driver路径”);指定火狐浏览器的geckodriver路径。
Chrome浏览器和IE浏览器的属性键名分别为webdriver.chrome.driver和webdriver.ie.driver
注意:driver.close()方法和driver.quit()方法的区别,记得调用quit关闭driver进程。
driver.quit()方法,关闭浏览器并且关闭driver.exe进程。
driver.close()方法,只是关闭掉当前的页面窗口。不关闭driver.exe。
在自动化测试启动webdriver浏览器时,默认是不带任何用户配置的,不会有cookie和相关设置,那么可以通过参数配置指定,加上用户文件,或者其它的一些设置。
chromedriver的用户文件加载时,最好是复制一份到其它位置调用,否则,需要关闭手动打开的浏览器,要不然会产生冲突,导致报错。
代码示例
public class UITest {
public static void main(String[] args) throws InterruptedException {
// 选择不同的浏览器打开百度搜索内容
baiduSearch(openBrowser("chrome"));
baiduSearch(openBrowser("firefox"));
baiduSearch(openBrowser("ie"));
}
static void baiduSearch(WebDriver driver) throws InterruptedException {
driver.get("https://www.baidu.com");
// 使用css选择器用id定位文本框并输入马云
driver.findElement(By.cssSelector("#kw")).sendKeys("马云");
// 使用id定位搜索按钮并点击
driver.findElement(By.id("su")).click();
Thread.sleep(1500);
// 获取搜索后的title并输出
System.out.println(driver.getTitle());
driver.quit();
}
static WebDriver openBrowser(String browser) {
switch (browser) {
case "chrome":
System.setProperty("webdriver.chrome.driver", "UI\\webdriver\\chromedriver.exe");
return new ChromeDriver();
case "firefox":
System.setProperty("webdriver.gecko.driver", "UI\\webdriver\\geckodriver.exe");
return new FirefoxDriver();
case "ie":
System.setProperty("webdriver.ie.driver", "UI\\webdriver\\IEDriverServer.exe");
return new InternetExplorerDriver();
default:
System.setProperty("webdriver.chrome.driver", "UI\\webdriver\\chromedriver.exe");
return new ChromeDriver();
}
}
}
网友评论