1、获取Cookie
Set<Cookie> cookies = driver.manage().getCookies();
2、判断页面元素是否存在
public boolean isElement(By by){
try{
driver.findElement(by);
return true;
}
catch(NoSuchElementException e){
e.printStackTrace();
return false;
}
}
3、对话框的处理
① 在处理对话框中输入字符
driver.switchTo().alert().sendKeys("这是输入对话框.........");
② 单击对话框的确定按钮
driver.switchTo().alert().accept();
4、模拟鼠标和键盘的操作
① 按下ctrl
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL);//按下CTRL键
action.keyUp(Keys.CONTROL);//释放CTRL键
②在某个元素下鼠标右键
Actions action = new Actions(driver);
action.contextClick(driver.findElement(By.id("kw"))).perform();
5、单选框和复选框的操作
思路:对于元素属性(id、name等)有一定规律的可通过下面这种方式进行循环遍历(代码一)
对于元素属性一致的,可通过driver.findElements(WebElement ele)获取元素集合(代码二)
/**
* 依次点击单选框
*/
for(int i=1;i<=4;i++){
driver.findElement(By.id("56483746999079_chk_"+i)).click();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
}
/**
* 复选框的操作
*/
List<WebElement> checkboxs=driver.findElements(By.name("id"));
/**
* 遍历当前页面的复选框并依次勾选
*/
for(int i=0;i<checkboxs.size();i++){
checkboxs.get(i).click();
// 检查复选框的勾选情况
System.out.println(checkboxs.get(i).getAttribute("value")+
"是否勾选------------"+checkboxs.get(i).isSelected());
System.out.println(checkboxs.get(i).getAttribute("value")+
"是否可编辑--------"+checkboxs.get(i).isEnabled());
}
6、Actions 鼠标悬停、下拉框的选择
测试场景:
① 打开百度首页,模拟鼠标悬停在右上角“设置”元素上,自动弹出下拉列表
② 点击下拉列表中的“高级搜索”,在弹出的页面中选择“时间”下拉框中的“最近一月”
实现 ① Actions 鼠标悬停
WebElement setting=driver.findElement(By.xpath(".//*[@id='u1']/a[8]"));
Actions action =new Actions(driver);
//鼠标移动到某个元素上
action.moveToElement(setting).perform();
实现 ② 下拉框的选择
//点击自动弹出的下拉列表中的“高级搜索”
driver.findElement(By.linkText("高级搜索")).click();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
/**
* 选择时间中的“最近一月”
* 通过gpc元素获取下拉框的集合,遍历这个集合,点击设定的那个
*/
WebElement times=driver.findElement(By.name("gpc"));
String timetext="最近一月";
List<WebElement> dates=times.findElements(By.tagName("option"));
for(int i=0;i<dates.size();i++){
System.out.println("开始遍历下拉列表"+(i+1)+":"+dates.get(i).getText());
if(dates.get(i).getText().equals(timetext)){
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
dates.get(i).click();
break;
}
}
7、窗口操作
① 窗口的基本操作
Window window=driver.manage().window();
window.maximize();//窗口最大话
window.getSize().getWidth() window.getSize().getHeight()//获取窗口尺寸
window.getPosition().getX() window.getPosition().getY()//获取窗口位置
/**
* 设置窗口的位置和大小
*/
window.setPosition(new Point(77, 77));
window.setSize(new Dimension(800,600));
② 多窗口处理
/**
* 将窗口集合转换为数组
*/
String[] handlers=new String[driver.getWindowHandles().size()];
driver.getWindowHandles().toArray(handlers);
/**
* 切换到第一个窗口
*/
WebDriver driver2=driver.switchTo().window(handlers[0]);
/**
* 处理多窗口的切换
*/
public void switchWindow(){
String currentwindow=driver.getWindowHandle();
Set<String> handles=driver.getWindowHandles();
Log4jTool.info(("当前窗口数量为:"+handles.size()));
Iterator<String> iterator=handles.iterator();
while(iterator.hasNext()){
if(currentwindow==iterator.next()){
continue;
}
try{
driver.close();//关闭旧窗口
WebDriver window=driver.switchTo().window(iterator.next());//切换到新窗口
Log4jTool.info("成功切换到新窗口"+window.getTitle());
}catch(Exception e){
Log4jTool.info("切换窗口失败"+e.getMessage());
}
}
}
8、上传文件
driver.findElement(By.id("file")).sendKeys("C:\\Users\\ChangRyi\\Desktop"
+ "\\Selenium3\\截图文件\\2017_11_28_213339.jpg");
//点击上传
driver.findElement(By.id("filesubmit")).click();
9、精准对比截图
/**
* 两个文件进行像素比较的实现,获取文件像素大小,
* 然后逐一比对,如果有任意一个像素不同则视为这两张截图不一致
*/
try {
BufferedImage oldbufferedImage=ImageIO.read(oldfile);
DataBuffer oldDataBuffer=oldbufferedImage.getData().getDataBuffer();
int oldsize=oldDataBuffer.getSize();
BufferedImage newbufferedImage=ImageIO.read(newfile);
DataBuffer newDataBuffer=newbufferedImage.getData().getDataBuffer();
int newsize=newDataBuffer.getSize();
//截图是否一致标志
boolean iscomparison=true;
if(oldsize==newsize){
for(int i=0;i<oldsize;i++){
//如果像素对比不一致则标记iscomparison为false
if(oldDataBuffer.getElem(i)!=newDataBuffer.getElem(i)){
iscomparison=false;
break;
}
}
}else{
//如果像素大小不一致标记为false
iscomparison=false;
}
if(iscomparison)
System.out.println("两张图片对比一致!");
else
System.out.println("两张图片对比不一致!");
//如果iscomparison为false则打印出提示信息
Assert.assertTrue(iscomparison,"测试过程中截图与期望截图不一致!");
} catch (IOException e) {
e.printStackTrace();
}
10、对时间控件的处理
思路有二:
① 如果时间控件输入框为可编辑,则直接使用sendKeys输入时间
dateElement.sendKeys("2017-12-03");
② 如果时间控件对应输入框为只读,则可以删除只读属性继续使用sendKeys输入
/**
* 删除某个元素属性值
*/
public void removeAttribute(WebDriver driver,WebElement element,
String attributeName){
JavascriptExecutor js=(JavascriptExecutor) driver;
js.executeScript("arguments[0].removeAttribute(arguments[1],"
+ "arguments[2])",element,attributeName);
}
//删除只可读属性
removeAttribute(driver, dateElement, "readonly");
dateElement.sendKeys("2017-12-03");
11、使用JavaScriptExecutor单击元素
/**
* 使用js实现点击操作
*/
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
12、Robot对象操作键盘
能够通过Robot对象操作键盘上的按键完成复制、粘贴、切换焦点、和回车等常用操作
/**
* 模拟Ctrl+V 将字符串进行粘贴
*/
public void ctrlAndV(String character){
StringSelection selection=new StringSelection(character);
//将字符串放到剪贴板中
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);
Robot robot = null;
try {
robot=new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
//按下Ctrl键
robot.keyPress(KeyEvent.VK_CONTROL);
//按下V键
robot.keyPress(KeyEvent.VK_V);
//释放V键
robot.keyRelease(KeyEvent.VK_V);
//释放Ctrl键
robot.keyRelease(KeyEvent.VK_CONTROL);
}
Selenium常用API及操作
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...