- 浏览器、鼠标、键盘 操作
maximize() 设置浏览器最大化
setSize() 设置浏览器宽高
back() 模拟浏览器后退按钮
forward() 模拟浏览器前进按钮
refresh() 刷新页面(F5)
Actions 类提供了鼠标操作的常用方法:
contextClick() 右击
clickAndHold() 鼠标点击并控制
doubleClick() 双击
dragAndDrop() 拖动
sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)
sendKeys(Keys.SPACE) 空格键(Space)
sendKeys(Keys.TAB) 制表键(Tab)
sendKeys(Keys.ESCAPE) 回退键(Esc)
sendKeys(Keys.ENTER) 回车键(Enter)
- 浏览器cookie操作
WebDriver 操作Cookie的方法:
getCookies() 获得所有 cookie 信息。 -
getCookieNamed(String name) 返回字典的key为“name”的Cookie信息。
addCookie(cookie dict) 添加Cookie。“cookie_dict”指字典对象,必须有 name和value值。
deleteCookieNamed(String name) 删除Cookie 信息“name”是要删除的 cookie的名称
deleteAllCookies() 删除所有 cookie 信息。
-
在测试过程中需要把结果截屏保存下来。 截屏操作,图片用当前时间命名。
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.commons.io.FileUtils;
//转换时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
//获取当前时间
String time = dateFormat.format(Calendar.getInstance().getTime());
//执行屏幕截取
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件;"截图"即时保存截图的文件夹
FileUtils.copyFile(srcFile, new File("E:\\截图", time + ".png"));
- 浏览器-无头浏览器设置
在linux环境执行脚本,一般需要设置无头浏览器模式
import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.chrome.ChromeOptions;
//使用ChromeOptions的setHeadless
ChromeOptions chrome_options = new ChromeOptions();
//setHeadless true设置无浏览器模式
chrome_options.setHeadless(true);
//初始化一个chrome_options属性的chrome浏览器实例
WebDriver driver = new ChromeDriver(chrome_options);
- 浏览器-模拟手机模式
import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.chrome.ChromeOptions;
ChromeOptions chrome_options = new ChromeOptions();
//设置手机模式方法1
Map<String, String> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", "iPhone X");
chrome_options.setExperimentalOption("mobileEmulation", mobileEmulation);
//初始化一个chrome_options属性的chrome浏览器实例
WebDriver driver = new ChromeDriver(chrome_options);
参考:http://chromedriver.chromium.org/mobile-emulation
https://blog.csdn.net/u013948858/article/details/81123951
浏览器-浏览器操作
maximize() 设置浏览器最大化
setSize() 设置浏览器宽高
back() 模拟浏览器后退按钮
forward() 模拟浏览器前进按钮
refresh() 刷新页面(F5)
//最大化窗口
driver.manage().window().maximize();
//设置窗口大小为375*812
Dimension targetSize = new Dimension(375, 812);
driver.manage().window().setSize(targetSize);
// back() 后退到上一个页面
driver.navigate().back();
// forward() 前进
driver.navigate().forward();
//刷新页面
driver.navigate().refresh();
浏览器cookie操作
//查看所有cookie
System.out.println("delete cookie: " + driver.manage().getCookies());
//查看部分cookie
System.out.println("get saturn: " + driver.manage().getCookieNamed("saturn"));
//删除所有cookie
driver.manage().deleteAllCookies();
driver.navigate().refresh();
//添加cookie
Cookie c1 = new Cookie("saturn", "ve76e10f83e8e1360bf9619a6c1d982ee");
driver.manage().addCookie(c1);
driver.navigate().refresh();
文件上传
查看元素属性是否为“input”?如图辨别input元素
input元素,则按照一般的input元素的sendkeys方法处理。
input元素,只可以直接把文件路径输入上传
driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/div[2]/input")).sendKeys("C:\\Koala.jpg");
TimeUnit.SECONDS.sleep(10);
非input元素,可以借助于Robot类。 或者第三方工具AutoIT。 Robot方法如下
// 指定图片的路径
StringSelection sel = new StringSelection("C:\\Penguins.jpg");
// 把图片文件路径复制到剪贴板
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel,null);
System.out.println("selection" +sel);
// 点击本地上传图片
driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/div[3]/input")).click();
// 新建一个Robot类的对象
Robot robot = new Robot();
Thread.sleep(1000);
// 按下回车
robot.keyPress(KeyEvent.VK_ENTER);
// 释放回车
robot.keyRelease(KeyEvent.VK_ENTER);
// 按下 CTRL+V
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
// 释放 CTRL+V
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_V);
Thread.sleep(1000);
// 点击回车 Enter
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
处理Alert弹窗
很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭,有些可能有取消和确定按钮,还有些调查的alert框,可以运行用户输入文字。
accept()方法就是确定,dismiss()就是点击alert框上面的取消按钮,getText()就是获取alert内部的文字
利用Javascript处理竖向滚动条
使用javascript脚本去处理竖向滚动条。webdriver中是没有拖动滚动条的方法的,需要借助javascript来根据一个页面元素去实现拖动滚动条的过程
一个是webdriver中如何执行Js脚本,第二个是如何写js滚动到某一个元素附近。
// 定义页面底部 一个元素
WebElement element = driver.findElement(By.xpath("//*[@id=\"app\"]/div/div[8]/div[2]/a"));
//创建一个javascript 执行实例
JavascriptExecutor je = (JavascriptExecutor) driver;
//执行js语句,拖拽浏览器滚动条,直到该元素到底部,马上就不可以见
je.executeScript("arguments[0].scrollIntoView(true);",element);
处理下拉框选择
通过相同的Xpath表达式可以获取一组元素,然后把这一组元素放到集合类list中,通过遍历,判断一个元素的文字部分是不是包含一个我们要操作的字符串,如果是就点击该元素,并退出当前循环,ele.getAttribute("inerHTML")就是获取当前元素上面的文字,相当于ele.getText().。
// 点击选中速度这个下拉菜单
driver.findElement(By.xpath("//*[@id='speed-button']")).click();
// 一个节点下所有的option选项
List<WebElement> list = driver.findElements(By.xpath("//*[@id='speed-menu']/li/div"));
for (WebElement ele : list){
if(ele.getAttribute("innerHTML").equals("Fast")){
ele.click();
break;
}
}