一、编写第一个自动化测试脚本
public class FirstTest {
public static void main(String[] args) {
//
System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
// 配置chrome的执行文件的位置
ChromeOptions options = new ChromeOptions();
options.setBinary("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
// 1、打开浏览器
ChromeDriver chromeDriver = new ChromeDriver(options);
// 2、访问百度
chromeDriver.get("https:www.baidu.com");
}
}
二、定位元素
-
By.id()
// 根据id定位到百度的输入框,并输入关键字"腾讯课堂" chromeDriver.findElement(By.id("kw")).sendKeys("腾讯课堂");
-
By.name() 根据标签的name属性定位
-
By.tagName() 根据标签来定位
-
By.className()根据标签的class属性来定位
-
By.linkText()
根据超链接的文本定位 -
By.partialLinkText()
根据超链接的模糊文本定位 -
By.cssSelector()
css样式选择器定位元素-
cssSelector的精确定位:
By.cssSelector(" 标签名[属性='属性值'] ")
可以接多个属性
-
-
xpath相对定位:只要不是/开始的就是相对路径 //*[@name=‘phone’]
-
// 匹配指定节点,不考虑位置(/ 则表示绝对路径,从根节点开始)
-
*通配符 ,匹配任意元素节点。
-
@选取属性
-
[] 属性判断条件表达式
↓ ↓ ↓ ↓ ↓ ↓ ↓
-
根据标签名+属性+属性值精准定位元素 //input[@name='ie' and @value='utf-8']
-
每个属性前面都需要加上@符号
-
-
text()
根据超链接的文本值精准定位 //a[text()='百度首页'] -
contains(text(),'文本')
根据超链接的文本模糊定位 //a[contains(text(),'百度')]
-
三、常用API
该类API都是在new ChromeDriver()类中的方法。
-
click()
触发点击事件chromeDriver.findElement(By.className("s_btn")).click();
-
clear()
清除文本内容chromeDriver.findElement(By.id("kw")).clear();
-
getTagName()
获取元素的标签名 -
getAttribute(属性)
根据属性名获取元素属性值 -
getText()
获取当前元素的文本 -
isDisplayed()
查看元素是否显示 -
get(String url)
访问指定的url页面 -
getCurrentUrl()
获取当前页面的url地址 -
getTitle()
获取当前页面的标题 -
getPageSource()
获取当前页面的源代码 -
quit()
关闭驱动对象以及所有相关窗口 -
close
() 关闭当前窗口 -
getWindowHandle()
返回当前页的句柄 -
getWindowHandles()
获取当前打开窗口的所有句柄 -
manage()
获取Options-----浏览器菜单操作对象-
该对象是
Options
类型WebDriver.Options options = chromeDriver.manage();
-
window().fullscreen()
可以将当前窗口全屏 -
Dimension size = options.window().getSize();
获取浏览器宽高System.out.println("浏览器高度 = " + size.height); System.out.println("浏览器宽度 = " + size.width);
-
-
-
navigate()
获取navigate对象
四、等待
1、硬性等待
直接使用线程休眠的方法---sleep()
2、隐式等待(全局有效):在chromeDriver
实例化完成之后设置,此等待全局有效。
chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
3、显示等待(局部有效):先实例化出webDriverWait(chromeDriver,timeOut)
这里超时时间单位为秒(s)
WebDriverWait webDriverWait = new WebDriverWait(chromeDriver,5);
// 当超链接显示,并且用户可见
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='_职业培训、考试提升在线教育平台']")));
五、特殊元素操作
1、alert弹窗
-
accept()
接收确认弹窗 -
dismiss()
取消弹窗 -
getText()
获取弹窗的文本
// 定位到弹出弹窗的按钮并点击
chromeDriver.findElement(By.xpath("//*[@id=\"abtn\"]")).click();
Thread.sleep(3000);
// 找到对应的弹窗
Alert alert = chromeDriver.switchTo().alert();
// 获取弹窗文本
System.out.println("弹窗:" + alert.getText());
// 接收
alert.accept();
// 取消
alert.dismiss();
2、confirm弹窗
-
accept()
确认 -
dismiss()
取消 -
getText()
获取弹窗的文本
chromeDriver.findElement(By.id("abtn")).click();
Thread.sleep(3000);
// 获取到弹窗对象Alert
Alert alert = chromeDriver.switchTo().alert();
// 使用alert的方法getText()获取到弹窗的文本
System.out.println("确认模态框:"+alert.getText());
// 取消
alert.dismiss();
// 确认
alert.accept();
3、iframe内嵌窗口
-
frame(iframe的id)
根据iframe
的id
获取切换窗口
// 根据iframe的id切换窗口至id为aframe
chromeDriver.switchTo().frame("aframe");
4、window
切换窗口
-
getWindowHandle()
获取当前窗口句柄 -
getWindowHandles()
获取所有窗口的句柄 -
getTitle()
获取当前窗口的标签
System.out.println("获取所有窗口的句柄: " + chromeDriver.getWindowHandles());
// 获取所有窗口的句柄: [CDwindow-0B83C18A8FC09F4940757F1E6CC14395, CDwindow-328DE54417C4A30C6B8E7C7E77872A44]
Set<String> handles = chromeDriver.getWindowHandles();
for (String handle: handles) {
// 切换窗口
chromeDriver.switchTo().window(handle);
// 通过判断title,若切换到我们想要的窗口就直接退出循环
if(chromeDriver.getTitle().equals("b.html")){
break;
}
}
System.out.println("这是b窗口的句柄: " + chromeDriver.getWindowHandle());
// 这是b窗口的句柄: CDwindow-328DE54417C4A30C6B8E7C7E77872A44
// 这里则就是在我们想要的窗口的元素进行操作
chromeDriver.findElement(By.xpath("//input[@id='bb']")).sendKeys("this is b.html");
5、 select
下拉选择框
-
getOptions()
获取所有选项 -
selectByIndex(index)
根据索引选中对应的元素(索引从0开始) -
selectByValue(value)
根据指定value值选中对应的选项 -
selectByVisibleText(text)
选中文本值对应的选项
// 定位下拉选择框
WebElement webElement = chromeDriver.findElement(By.name("se"));
// 将WebElement对象包装成Select对象
Select select = new Select(webElement);
select.selectByIndex(1);
Thread.sleep(2000);
select.selectByValue("3");
6、执行Javascript脚本
// 将chromeDriver强转为jsE对象
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) chromeDriver;
// executeScript(js脚本字符串) 可以用这个关闭readOnly属性
javascriptExecutor.executeScript("document.getElementById('train_date').value='lwj '");
chromeDriver.findElement(By.id("train_date")).sendKeys("is yyds");
转载请注明出处。
2021-12-31