自动化测试 selenium常用操作
创始人
2024-05-26 23:25:41
0

最简单的代码实例

import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;public class AutoTestDemo1 {//浏览器自动搜索,暂停是为了能看到,要不访问太快public void testKunKun() throws InterruptedException {//打开浏览器ChromeDriver chromeDriver = new ChromeDriver();Thread.sleep(5000);//进入百度网站chromeDriver.get("http://www.baidu.com");Thread.sleep(5000);//输入蔡徐坤chromeDriver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");Thread.sleep(5000);//点击搜索chromeDriver.findElement(By.cssSelector("#su")).click();Thread.sleep(5000);//退出浏览器chromeDriver.quit();}
}

1.常用方法

查找元素

① findElement()

  • 参数:By类

  • 返回值:WebElement

② findElements()

  • 参数:By类

  • 返回值:List

元素的定位By类

自动化里要求元素的定位必须是唯一的,但是有时候我们复制的selector和xpath并不是唯一的,这时候需要我们手动更改成为一的。

①选择器cssSelector定位

②使用xpath

  • 层级:/子级 //跳级

  • 属性:@

  • 函数:contains()

2.常用功能

点击click

提交(通过回车键提交)submit()官方不推荐使用,更推荐使用click

清楚 clear() 输入错误的时候 可以清楚再重新输入 但是自动化测试使用 不多

获取文本getText

  • 返回值 String

  • 这个方法可以获取文本,不是属性

获取属性值getAttribute

Value值,id,type,class等等很多属性都可以获得

System.out.println(chromeDriver.findElement(By.cssSelector("#kw")).getAttribute("id"));
System.out.println(chromeDriver.findElement(By.cssSelector("#kw")).getAttribute("name"));
System.out.println(chromeDriver.findElement(By.cssSelector("#kw")).getAttribute("value"));

获取页面 标题 URL

System.out.println(driver.getTitle());
System.out.println(driver.getCurrentUrl());

3.窗口

窗口大小设置

自动化测试过程中用的不多,但要知道是通过manage().windows()来设置的
//窗口最大化
driver.manage().window().maximize();
//窗口最小化
driver.manage().window().minimize();
//全屏:和最大化不一样,要有区分
driver.manage().window().fullscreen();
//自定义大小:这里要使用 Dimension 来设置
driver.manage().window().setSize(new Dimension(1000,800));

窗口的切换

页面每打开一个标签页,会自动的给标签页进行标识,这个标识叫做句柄。
在日常自动化测试的过程中,我们几乎不会使用到 两个以上的窗口,只需要掌握两个窗口的切换即可
public void testSwitchWindow() throws InterruptedException {ChromeDriver driver = new ChromeDriver();driver.get("http://www.baidu.com");Thread.sleep(1000);driver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");driver.findElement(By.cssSelector("#su")).submit();//当前有两个窗口,分别是 百度窗口 和 CXK窗口,我们要怎么切换呢?//1.获取  当前页面的句柄  和  全部页面的句柄String now = driver.getWindowHandle();Set all = driver.getWindowHandles();//遍历,切换当前页面句柄为另一个for (String str : all){if (str!=now){driver.switchTo().window(str);//注意这个 switchTo方法}}
}

屏幕截图

注意屏幕截图 要保存截图为 文件的格式,而保存文件需要加入一个新的依赖
  • 多次执行的话,重名文件会被覆盖,我们可以将文件的命名添加动态数据(时间戳)

//这个里面的参数选择 OutputType.File
File file = driver.getScreenshotAs(OutputType.FILE);
String fileName = "Capture.png";
//这里还要使用 FileUtils类
FileUtils.copyFile(file,new File(fileName));

4.等待

程序执行的速度要比浏览器快很多,所以我们要设置等待,防止我们的操作前置

强制等待

线程阻塞实现进行,也就是我们上面一直写到的Thread.sleep(),这种方法我们在自动化测试中不能用的特别多。如果一个用例就需要几秒,几千个程序就需要浪费很多时间

隐式等待

隐式等待会做用于driver的整个生命周期。会一直轮询判断元素是否存在,如果不存在就在时间内不断轮询,直到元素能够被找到
private static ChromeDriver driver = new ChromeDriver();
public static void waitControl(){//设置隐式等待最长时间为10s  下面的语句会很快就执行完  implicitly隐式地,含蓄地driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));driver.get("http://baidu.com");driver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");driver.findElement(By.cssSelector("#su")).submit();
}

显式等待

显示等待只做用于一条语句,也是会一直轮询判断元素是否存在
private static ChromeDriver driver = new ChromeDriver();
public static void waitControl2(){
//不同的是只有findElement(By.cssSelector("#su"))被显式等待,并不是全局new WebDriverWait(driver,Duration.ofSeconds(5)).until(driver->driver.findElement(By.cssSelector("#su")));
}

5.浏览器导航

浏览器导航,通常用到的有 前进 后退 和 刷新。看下面代码
private static ChromeDriver driver = new ChromeDriver();
public static void navigateControl() {driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));//搜索简写//driver.get("http://www.baidu.com");//搜索全写,和上面的一样的driver.navigate().to("http://www.baidu.com");driver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");//后退一步driver.navigate().back();//前进一步driver.navigate().forward();//刷新一下driver.navigate().refresh();
}

6.弹窗

弹窗分为三种,警告弹窗(只有确认案件,只是提示你一下)、确认弹窗(可以选择确定或者取消)、提示弹窗(可以输入信息)。如下图所示
//切换到弹窗,进行弹窗的处理
Alert alert = driver.switchTo().alert();
//弹窗输入文本(注意页面可能看不到效果,但是是输入了文本)
alert.sendKeys("xxx内容");
//弹窗点击确认按钮
alert.accept();
//弹窗点击取消按钮
alert.dismiss();

注意:

  • 当弹窗只有一个按钮,accept和dismiss都能处理

  • 如果弹窗没有本文框,使用了sendkeys也是不会报错的,浏览器会执行操作,但是页面没有变化

7.选择框

选择框点击其他地方,就会收回,无法定位xpath或者selector,那么应该怎么做呢?

选择框类型:根据文本选择、根据序号选择,根据属性选择。

假如我们选择 中非 那么看我们怎么实现的:

// 1.找到选择框元素
WebElement element  = driver.findElement(By.cssSelector("注意这里是选择框元素