Selenium自动化测试-进阶

  • 浏览器、鼠标、键盘 操作

 

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指字典对象,必须有 namevalue值。

    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;
    }
    }

 

  •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值