1.自动化测试分类
- 接口自动化测试
- UI自动化测试(移动端自动化测试、Web端自动化测试)
2.选择Selenium作为web自动化工具原因(面试题)
- 开源免费
- 支持多个浏览器
- 支持多个系统
- 支持多语言
- Selenium包提供很多供测试使用的API
3.自动化是什么?为什么要做自动化?
- 自动化是测试人员为了提高效率或者保证测试质量,减少人力消耗,让代码辅助测试人员来执行测试的一个过程
4.自动化脚本打开浏览器的工作原理
- 编写的自动化脚本----创建http请求发送给浏览器驱动----浏览器驱动包含一个http server请求---操控浏览器----执行测试步骤
- 驱动作用:驱动接收自动化脚本发送过来的http请求,并解析请求发送给浏览器,当浏览器执行完成后,会把结果返回给脚本
5. 使用Java编写Selenium编写的自动化脚本的步骤
- 创建maven项目,在pom.xml里将依赖导入
<dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency> </dependencies>
- 开始进行自动化脚本的编写
public void dilireba(){ //创建驱动对象 ChromeOptions options=new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); ChromeDriver driver=new ChromeDriver(options); //访问网络 driver.get("http://baidu.com"); //查找元素并且操作元素 driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴"); driver.findElement(By.cssSelector("#su")).click(); //结束会话 driver.quit(); }
6.查找元素
- findElement() 查找当前的一个元素 ,返回值为WebElement
driver.findElement(By.cssSelector("#kw"))
- findElenments() 查找当前相同多个元素, 返回值为List<WebElement>
List<WebElement> eles=driver.findElements(By.className("hotsearch-item")); //打印每个名称 for (WebElement els: eles ) { System.out.println(els.getText()); }
7.元素定位 (自动化要求元素定位必须唯一)
- 选择器:Selector ,选择页面指定元素
driver.findElement(By.cssSelector("#kw"))
- Xpath
driver.findElement(By.xpath(//*[@id="kw"]))
8.常见元素操作
- 输入文本 sendkeys,仅使用于文字字段
driver.findElement(By.cssSelector("#kw")).sendKeys("小嘉");
- 点击 click
driver.findElement(By.cssSelector("#su")).click();
- 提交 submit,仅适用于表单元素
driver.findElement(By.cssSelector("#su")).submit();
- 获取文本 getText(),打印这个属性的值
String ret=driver.findElement(By.className("title-content-title")).getText(); System.out.println(ret);
- 清除 clear ,测试是否可以频繁输入
driver.findElement(By.cssSelector("#su")).clear();
- 获取标题 getTitle()
System.out.println(driver.getTitle());
- 获取url geturl()
System.out.println(driver.getCurrentUrl());
- 获取属性的值 getAttribute()
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("value"));
9.窗口设置
- 窗口最大化
//窗口最大化 driver.manage().window().maximize();
- 窗口最小化
//窗口最小 driver.manage().window().minimize();
- 窗口全屏
driver.manage().window().fullscreen();
- 手动设置窗口大小
//手动设置 driver.manage().window().setSize(new Dimension(1024,4444));
- 窗口切换(浏览器每次打开一个标签页,就会自动给每个标签页有一个标识,叫做句柄)10
//输入网址 driver.get("http://baidu.com"); //点击更多标签页 driver.findElement(By.cssSelector("#s-top-left > div > a")).click(); //先获取所有标签的句柄 Set<String>handles =driver.getWindowHandles(); //获取当前页面句柄 String curhandle=driver.getWindowHandle(); System.out.println("当前页面句柄:"+curhandle); //获取所有的句柄 for (String handle: handles) { if (handle!=curhandle){ //进行页面切换 driver.switchTo().window(handle); } } //查找更多页面的某个元素 Thread.sleep(2000); driver.findElement(By.cssSelector("#content > div:nth-child(2) > div:nth-child(2) > a")); Thread.sleep(2000); driver.quit();
10.屏幕截图
- 在pom.xml里面导入依赖
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
- 进行截图
public void test1() throws IOException { //启动驱动 ChromeOptions options=new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); ChromeDriver driver=new ChromeDriver(options); //输入网址 driver.get("http:baidu.com"); //找到输入框去输入元素 driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴"); //屏幕截图以文件形式 File srcfile=driver.getScreenshotAs(OutputType.FILE); //把它放在指定路径 String filename="my.png"; FileUtils.copyFile(srcfile,new File(filename)); driver.quit(); }
11.等待
- 强制等待:Thread.sleep(时间)
- 隐式等待:作用于driver的整个生命周期,会一直轮寻判断元素是否存在,如果不存在就等待设置好的时间里不断进行轮询,等到元素全被访问
public void test2(){ //启动驱动 ChromeOptions options=new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); ChromeDriver driver=new ChromeDriver(options); //开始隐式等待 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); //输入网址 driver.get("http:baidu.com"); //找到输入框去输入元素 driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴"); driver.quit(); }
- 显示等待: 针对代码一条去设置
new WebDriverWait(driver,Duration.ofSeconds(间)).until(driver.findElement(By.cssSelector("")));
12.浏览器导航
//后退回之前状态 driver.navigate().back(); //前进 driver.navigate().forward(); //刷新 driver.navigate().refresh();
13.弹窗
- 将driver对象作用到弹窗上(切换弹窗) driver.switchTo.alert()
- 确认--accept 取消---dismiss 输入文本----sendkeys
- 警告弹窗--只有1个按钮 确认弹窗--可以选择确定和取消 提示弹窗--可以输入文本
14.选择框 (可以根据文本选择、根据属性值选择、根据文本选择)
void selectControll() throws InterruptedException {
// driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/selenium4html/selenium-html/select.html");
// Thread.sleep(3000);
// WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
// //先创建选择框对象
// Select select = new Select(ele);
// Thread.sleep(3000);
// //根据文本来选择
select.selectByVisibleText("UPS Next Day Air ==> $12.51");
// //根据属性值来选择
select.selectByValue("12.51");
// //根据序号来选择
// select.selectByIndex(1); 序号从0开始
// Thread.sleep(3000);
// driver.quit();
// }
15.执行脚本 executeScript(js代码)
void scriptControll() throws InterruptedException {
driver.get("https://baidu.com/");
Thread.sleep(3000);
//执行js命令:让页面置顶/置底
//如果想要滑到最小面,值设置的大一些就行
driver.executeScript("document.documentElement.scrollTop=500");
Thread.sleep(3000);
//0就是顶部
driver.executeScript("document.documentElement.scrollTop=0");
driver.get("https://www.baidu.com");
Thread.sleep(3000);
driver.executeScript("var texts =
document.querySelector('#kw');texts.value='1111'");
Thread.sleep(3000);
driver.quit();
}
16.文件上传
void fileUploadControll() throws InterruptedException {
driver.get("url的路径");
Thread.sleep(3000);
driver.findElement(By.cssSelector("body > div > div > input[type=file]")).sendKeys("D:\\file\\比特教务\\测试\\selenium4html\\selenium-html\\upload.html");
//写入上传文件的文件夹路径和文件名
Thread.sleep(3000);
driver.quit();
17.浏览器参数的设置(需要在创建对象之前设置)
测试人员只会查看结果,不关注过程,所以需要设置无头模式(自动执行,我们在界面上看不到的),我们只可以在终端看见效果
void paramsControll(){ //百度搜索迪丽热巴 //先创建选项对象,然后再设置浏览器参数 ChromeOptions options = new ChromeOptions(); options.addArguments("-headless"); ChromeDriver driver = new ChromeDriver(options); driver.get("https://www.baidu.com"); driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴"); driver.findElement(By.cssSelector("#su")).click(); driver.quit();