Selenium支持多种编程语言
一、Java环境搭建
- 下载安装jdk8,配置环境变量;
- 下载Eclipse 开发工具;
- 下载selenium-3.14 离线包,并配置Project 项目依赖;
- 下载浏览器对应的WebDriver(Selenium是基于WebDriver技术的);
常用浏览器驱动下载地址:
- 谷歌:chromedriver Mirror(M114之前的)Chrome for Testing(M115之后的版本)
- 火狐:geckodriver Mirror(Firefox浏览器)
- 欧朋:operadriver Mirror(Opera浏览器)
基础代码如下:
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
//import org.openqa.selenium.firefox.FirefoxDriver;
public class webTest {
public static void main(String[] args) throws Exception {
/*
* 使用谷歌浏览器,加载webdriver驱动
* 指向chromedriver服务地址
*/
System.setProperty("webdriver.chrome.driver", "D:\\data\\webdriver\\chromedriver.exe");
// 创建ChromeDriver对象
WebDriver driver = new ChromeDriver();
/***
* 火狐浏览器使用方法如下:
* System.setProperty("webdriver.gecko.driver", "D:\\data\\webdriver\\geckodriver.exe");
* WebDriver driver = new FirefoxDriver();
***/
// 页面最大化
driver.manage().window().maximize();
// 打开指定网页
driver.get("https://www.baidu.com");
// 执行js脚本
String tips = "alert('selenium自动化')";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(tips);
// 页面停留2秒
Thread.sleep(2000);
// 处理弹窗
Alert confirm = driver.switchTo().alert();
// 获取弹窗内容
confirm.getText();
// 相当于点击确认
confirm.accept();
// 获取浏览器信息title
String stitle = driver.getTitle();
// 断言响应结果
if(stitle=="百度一下,你就知道")
System.out.println("ok");
else
throw new Exception("title error");
// 定位元素
WebElement elem = driver.findElement(By.id("kw"));
elem.sendKeys("上海");
// 页面停留2秒
Thread.sleep(2000);
// 关闭浏览器
driver.quit();
}
}
Selenium 提供了8种元素定位方式:
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
这8种定位方式在Java selenium 中所对应的方法为:
- findElement(By.id())
- findElement(By.name())
- findElement(By.className())
- findElement(By.tagName())
- findElement(By.linkText())
- findElement(By.partialLinkText())
- findElement(By.xpath())
- findElement(By.cssSelector())
二、集成TestNG框架
因为在实际的web自动化测试过程中,页面很多功能繁复,必须按模块按菜单进行整合,类似于java的单元测试,而且TestNG自带HTML报告。
1. 下载TestNG 离线包,解压后放到/eclipse/dropins/plugins/目录,重启Eclipse生效;
2. 给Project 配置TestNG,Project 上点击右键选"Build Path"--"Add Libraries…";
3. 选择"TestNG",点击Next至Finish结束;
至此,TestNG框架集成OK,开始创建TestNG class进行编码。
4. Project 的src上点击右键选 "New"--"Other";
5. 在弹出的界面中选择 "TestNG"--"TestNG class",点击Next;
6. 接着在界面中输入Class name(自定义),并勾选 "@BeforeTest" 和 "@AfterTest" 后点击Finish。
集成TestNG后的代码如下:
package unittest;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
public class webTest {
// 创建ChromeDriver对象
WebDriver driver = new ChromeDriver();
@Test
public void case_01() throws Exception {
// 执行js脚本
String tips = "alert('selenium自动化测试')";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(tips);
// 页面停留2秒
Thread.sleep(2000);
// 处理弹窗
Alert confirm = driver.switchTo().alert();
// 获取弹窗内容
confirm.getText();
// 相当于点击确认
confirm.accept();
// 获取浏览器信息title
String stitle = driver.getTitle();
// 断言响应结果
Assert.assertEquals(stitle, "百度一下,你就知道");
// 根据id定位元素
WebElement elem = driver.findElement(By.id("kw"));
elem.sendKeys("上海");
// 打印log
Reporter.log("case01通过");
// 页面停留2秒
Thread.sleep(2000);
}
@Test
public void case_02() throws Exception {
// 执行js脚本
String tips = "alert('web测试')";
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(tips);
// 页面停留2秒
Thread.sleep(2000);
// 处理弹窗
Alert confirm = driver.switchTo().alert();
// 获取弹窗内容
confirm.getText();
// 相当于点击确认
confirm.accept();
// 获取浏览器信息title
String stitle = driver.getTitle();
// 断言响应结果
Assert.assertEquals(stitle, "百度一下,你就知道");
// 根据name定位元素
WebElement elem = driver.findElement(By.name("wd"));
elem.clear();
elem.sendKeys("北京");
// 打印log
Reporter.log("case02通过");
// 页面停留2秒
Thread.sleep(2000);
}
@BeforeTest
public void beforeTest() {
// 加载webdriver驱动,指向chromedriver服务地址
System.setProperty("webdriver.chrome.driver", "D:\\data\\webdriver\\chromedriver.exe");
// 页面最大化
driver.manage().window().maximize();
// 打开指定网页
driver.get("https://www.baidu.com");
}
@AfterTest
public void afterTest() {
// 关闭浏览器
driver.quit();
}
}
运行上述java文件,Project 项目下会生成test-output 目录;
打开index.html 文件即是测试报告(如下图);
到这里,Selenium+Java+TestNG 进行web自动化测试已经成功了。
三、拓展
- 项目使用Maven集成(管理依赖包);
-
采用PO(page-object)模式。