
🔥个人主页: 寻星探路
🎬作者简介:Java研发方向学习者
📖个人专栏:****、《、《测试开发漫谈》 、**************************************************************《JavaEE 初阶启程记》**********************************************************************
⭐️人生格言:没有人生来就会编程,但我生来倔强!!!
目录
[1、警告弹窗 + 确认弹窗](#1、警告弹窗 + 确认弹窗)
一、等待
通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法:
1、强制等待
Thread.sleep ()
优点:使用简单,调试的时候比较有效
缺点:影响运行效率,浪费大量的时间
2、隐式等待
隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。
implicitlyWait () 参数:Duration类中提供的毫秒、秒、分钟等方法
示例:
java
//隐式等待1000毫秒
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
//隐式等待5秒
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。
优点:智能等待,作用于全局
3、显示等待
显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码 new WebDriverWait(driver, Duration.ofSeconds(3)).until($express)
$press:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类
返回值:boolean
示例:
java
WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));
ExpectedConditions预定义方法的一些示例:
• elementToBeClickable(By locator)‒用于检查元素的期望是可见的并已启用,以便您可以单击它
• textToBe (Bylocator , String str)-检查元素。
• presenceOfElementLocated(Bylocator)‒检查页面的DOM上是否存在元素。
• urlToBe(java.lang.String url)‒检查当前页面的URL是一个特定的URL。
java
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
boolean ispass = wait.until(ExpectedConditions.textToBe(By.cssSelector("#s-topleft > a:nth-child(1)"), "新闻"));
if(ispass){
System.out.println("测试通过");
}else {
System.out.println("测试失败");
}
优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活
缺点:写法复杂
隐式等待和显示等待一起使用效果如何呢?
测试⼀下:
java
//隐式等待设置为5s,显⽰等待设置为10s,那么结果会是5+10=15s吗?
SimpleDateFormat sim =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sim.format(System.currentTimeMillis()));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth child(1) > a > span.title-content"));
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
try{
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content")));
}catch (Exception e){
System.out.println("nosuelement!");
}
System.out.println(sim.format(System.currentTimeMillis()));
结果:重试多次,最终打印的等待时间有10s、11s....
结论:不要混合隐式和显式等待,可能会导致不可预测的等待时间。
二、浏览器导航
常见操作:
1)打开网站
java
// 更⻓的⽅法
driver.navigate().to("https://selenium.dev");
// 简洁的⽅法
driver.get("https://selenium.dev");
2)浏览器的前进、后退、刷新
java
driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();
案例:百度首页测试在线工具 - 你的工具箱标签入口
三、弹窗
弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口
1、警告弹窗 + 确认弹窗

java
Alert alert = driver.switchTo.alert();
//确认
alert.accept()
//取消
alert.dismiss()
2、提示弹窗

java
Alert alert = driver.switchTo.alert();
alert.sendKeys("hello");
alert.accept();
alert.dismiss();
四、文件上传
点击文件上传的场景下会弹窗系统窗口,进行文件的选择。
selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素
但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的
java
WebElement ele = driver.findElement(By.cssSelector("body > div > div > input[type=file]"));
ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");
五、浏览器参数设置
1)设置无头模式

2)设置浏览器加载策略
options.setPageLoadStrategy(PageLoadStrategy.NONE);