目录
WebDriver相关API
打印信息
打印title
打印url
浏览器的操作
浏览器最大化
设置浏览器的宽,高
操作浏览器的前进, 后退, 刷新
控制浏览器滚动条
键盘事件
键盘单键用法
键盘组合按键用法
鼠标事件
WebDriver相关API
打印信息
打印title
即打印该网址的标题.使用如下:
String title = webDriver.getTitle();
打印url
即打印该网址的url. 使用如下:
String url = webDriver.getCurrentUrl();
让我们写一个基本的测试单元:
private static void test04() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
String title = webDriver.getTitle();
String url = webDriver.getCurrentUrl();
System.out.println(title);
System.out.println(url);
if(title.equals("百度一下,你就知道") && url.equals("https://www.baidu.com/")) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
测试结果:
浏览器的操作
浏览器最大化
我们知道启动的浏览器不是最大化的, 这样不会影响脚本的执行, 但是有时候会影响我们"观看"脚本的执行.
webDriver.manager.window().maxmize(); (注意这里是"mize"而不是"size"!!!)
相似地还有一个能使得浏览器能变为全屏(就是需要esc才能缩小的那种):
webDriver.manager.window().fullscreen();
结果展示:
设置浏览器的宽,高
最大化还是不够灵活, 能不能随意地设置浏览器的宽, 高显示? 当然也是可以的.
webDriver.manager().window().setSize(new Dimension(600, 1000)); //注意这个方法是要创建Dimension对象, 然后传入这个对象, 而不是直接设置宽和高. (Dimension即尺寸的意思)
操作浏览器的前进, 后退, 刷新
浏览器上有一个后退, 前进按钮, 也相对比较容易实现:
webDriver.navigate().back(); //后退
webDriver.navigate().forward();//前进
webDriver.navigate().refresh();//刷新
这里给出一个测试用例, 自行测试:
private static void test06() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("星穹铁道");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
webDriver.navigate().back();
sleep(3000);
webDriver.navigate().forward();
sleep(3000);
webDriver.navigate().refresh();
}
控制浏览器滚动条
浏览器滚动条的控制需要依赖js脚本:
((JavaScriptExecutor)webDriver).executeScript("document.documentElement.scrollTop
=10000"); //滑动到最底部
((JavaScriptExecutor)webDriver).executeScript("document.documentElement.scrollTop
=0")//滑动到顶部
测试代码, 自行测试:
private static void test07() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("星穹铁道");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
sleep(3000);
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=0");
}
键盘事件
键盘单键用法
使用之前的sendKeys()方法即可实现键盘操作
sendKeys(Keys.TAB); //TAB
sendKeys(Keys.ENTER); //回车
sendKeys(Keys.SPACE); //空格
sendKeys(Keys.ESCAPE);//回退键 (esc)
键盘组合按键用法
这里介绍组合键ctrl + A, ctrl + X, ctrl + V三种用法, 其它的可自行摸索.
sendKeys(CONTROL, "A");
sendKeys(CONTROL, "X");
sendKeys(CONTROL, "V");
测试代码, 自行测试:
private static void test08() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("星穹铁道");
webDriver.findElement(By.cssSelector("#kw")).sendKeys(CONTROL, "A");
sleep(3000);
webDriver.findElement(By.cssSelector("#kw")).sendKeys(CONTROL, "X");
sleep(3000);
webDriver.findElement(By.cssSelector("#kw")).sendKeys(CONTROL, "V");
}
鼠标事件
之前我们已经学了click()方法, 这个就是鼠标左击的操作, 接下来我们来学习一下其它操作.
Actions类用于执行各种鼠标和键盘操作.
contextClick(element)方法用于执行鼠标右击操作.
doubleClick(element)方法用于执行鼠标的双击操作.
dragAndDrop(source, target)方法用于执行拖动操作, 将源元素拖动到目标元素上.
moveToElement(element)方法用于将鼠标移动到指定的元素上.
测试代码,自行测试:
private static void test09() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("星穹铁道");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//创建Actions对象
Actions actions = new Actions(webDriver);
//找到图片按钮
WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
//移动到指定元素并右击
/**
* 注意: perform()方法用于执行构建的操作序列. 在Selenium WebDriver中, 许多动作都需要通过
* perform()方法来触发实际的执行. 在Actions类中, 使用perform()方法可以执行鼠标移动,
* 点击, 拖动等操作.
*/
actions.moveToElement(webElement).contextClick().perform();
}
注: perform()方法用于执行构建的操作序列. 在Selenium WebDriver中, 许多动作都需要通过perform()方法来触发实际执行. 在Actions类中, 使用perform()方法可以执行鼠标移动,点击, 拖动等操作.
没有调用perform()方法, 操作序列不会被执行, 因此在使用Actions类时务必记得调用perform()方法来触发操作的实际执行. 就连远在大洋彼岸的五星上将麦克阿瑟也说到:"如果当年在对这个软件进行自动化测试时, 如果我不像当时没有调用perform()方法的话, 我也能够拿满年终奖从而为军队补充军费了罢".