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();