Selenium常用API详解
1、打开关闭页面
driver.get("https://www.baidu.com");
driver.quit();
2、查找定位页面元素
在Selenium中,在打开页面的情况下,通过findElement方法,即可定位页面元素
- 定位的方法有很多
id,name,class name,link text,
partial link text,tag name,xpath,css selector
百度页面的搜索框
driver.findElement(By.id("kw"));
driver.findElement(By.xpath("//*[@id=\"kw\"]"));
3、操作测试对象
- 前面知识都是定位元素,定位只是第一步,定位之后需要对这个元素进行操作,取决于定位元素需要进行的下一步操作。
1、键盘输入文本
百度的文本框输入
driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
2、鼠标点击操作
driver.findElement(By.cssSelector("#kw")).click();
3、提交操作
driver.findElement(By.cssSelector("#su")).submit();
4、清除文本
driver.findElement(By.cssSelector("#kw")).clear();
5、获取文本
String text = driver.findElement(By.xpath("//*[@id=\"hotsearch-content-wrapper\"]/li[1]/a/span[2]")).getText();
System.out.println(text);
4.打印信息
获取页面的标题和URL
driver.get("https://www.baidu.com");
String text = driver.getTitle();
System.out.println(text);
System.out.println(driver.getCurrentUrl());
5、窗口
- 设置窗口大小
driver.get("https://www.baidu.com");//打开百度页面
driver.manage().window().maximize();
driver.manage().window().minimize();
driver.manage().window().fullscreen();//全屏
driver.manage().window().setSize(new Dimension(50,90));//手动设置大小
6、屏幕截图
-
程序的执行速度快于页面渲染的速度(可能是网速的原因),会导致自动化执行的时候,找不到页面元素,因此需要记录当时的场景
-
导入截图的包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
7、等待
- 强制等待
通过线程阻塞来进行,也就是Thread.sleep() ,这种方式在自动化中会用到,但是用的不是很多,假设一个用例设置5s的等待时间,那么100个测试用例效率就十分低下,而且很大概率,在我们设置的等待时间之内,页面就已经渲染出来了。
Thread.sleep(5000);
- 隐式等待
隐式等待作用于driver的整个生命周期,会在你设置的一个时间内,反复判断元素是否存在,直到元素被找到才停止等待,若超出时间,就执行下一步
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
- 显示等待
当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception,和隐式等待不同的是,显示等待一般作用某一条代码
new WebDriverWait(driver,Duration.ofSeconds(2)).until(drivers->driver.findElement(By.cssSelector("#\\31 > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > a > div > p > span > span")));
8、浏览器导航
- 前进、后退、刷新
driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");
driver.findElement(By.cssSelector("#su")).submit();
driver.navigate().back();//回退
Thread.sleep(5000);
driver.navigate().forward();//前进
Thread.sleep(5000);
driver.navigate().refresh();//刷新
Thread.sleep(5000);
driver.quit();//退出
9、弹窗
- 弹窗类型
警告弹窗alert、确认弹窗confirm、提示弹窗prompt
- 处理弹窗的步骤
- 获取浏览器地址
- 切换到弹窗
- 选择处理方式:输入文本,确认,取消
driver.get("file:///D:/%E4%B8%8B%E8%BD%BD/JAVA/selenium-html/confirm.html");//确认弹窗
driver.get("file:///D:/%E4%B8%8B%E8%BD%BD/JAVA/selenium-html/Prompt.html");//提示弹窗
driver.findElement(By.cssSelector("body > input[type=button]")).click();
Alert alert = driver.switchTo().alert();
alert.sendKeys("我真的输入了");
alert.accept();
alert.dismiss();//点击取消
10、选择框
-
下拉框里的内容需要进行两次定位,先定位到下拉框对下拉框进行操作后,再定位到下拉框内里的选项
根据文本选择 根据属性值选择 根据序号选择(序号从0开始)
driver.get("file:///D:/%E4%B8%8B%E8%BD%BD/JAVA/selenium-html/select.html");
WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));
Select select = new Select(ele);
select.selectByVisibleText("UPS Next Day Air Saver ==> $11.61");//文本
select.selectByValue("10.69");//值
select.selectByIndex(2);//序号
11、文件上传
- 这里并不是直接把文件上传到服务器了,而是把要上传的文件的绝对路径放在了这里
-
driver.get("D:\\下载\\JAVA\\selenium-html\\upload.html");
driver.findElement(By.cssSelector("body > div > div > input[type=file]"))
.sendKeys("C:\\Users\\13475\\Desktop\\java\\数据库.docx");
12、浏览器参数设置
- 实际的工作中,测试人员将自动化部署在机器上自动执行,不会一直盯着自动化执行的过程,而是直接查看自动化执行的结果。
- EdgeDriver类提供了一个构造参数,可以实现以上场景,也叫做“无头模式”,不打开浏览器,直接显示测试结果
EdgeOptions options = new EdgeOptions();
options.addArguments("-headless");
EdgeDriver driver = new EdgeDriver(options);