java+selenium UI自动化001
selenium是一个用于Web应用程序测试的工具,可以用来模拟用户在浏览器上的操作。
支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等
一、selenium环境搭建
1.浏览器插件安装
katalon recorder插件是用来录制浏览器访问网站的脚本,可以另存为Java,python各种语言的脚本,katalon可支持各种浏览器
Tryxpath安装方式与Katalon一致
安装成功后,会出现绿色的图标
2.selenium环境安装
selenium下载链接:http://selenium-release.storage.googleapis.com/index.html
在eclipse创建java工程,将文件夹中的jar包导入Java工程,就可以进行Java脚本编写了,也可以用Maven引入
3. Eclipse+JDK+Maven环境安装
1.在官网下载JDK1.8及以上版本,安装,配置环境变量
2.在官网下载EclipseEclipse,解压
3.在官网下载Maven
解压到指定目录
在环境变量中新增变量MAVEN_HOME= E:\apache-maven-3.6.1
在path末尾添加%MAVEN_HOME%\bin
在命令行输入:mvn –version,出现如下,则表示安装成功
4.在Eclipse下配置Maven
在Eclipse菜单WindowprefencesMavenInstallation窗口中点击Add,添加Maven文件所在路径
在Eclipse菜单WindowprefencesJavaInstalled JRES路径下,确认安装的是jdk不是jre,否则会报错
5.Eclipse中创建一个Maven项目
Eclipse-->NewOtherMavenMaven Project
6.Eclipse安装TestNG
打开菜单helpInstall New SoftWare
在Work with中输入http://beust.com/eclipse,点击Add
在弹出窗口中输入TestNG,点击OK
勾选TestNG复选框,点击Next,Next
接受协议,点击Finish,等待安装,完成
二、selenium元素定位
元素定位方式:
根据ID定位
id=top-signup
根据name定位
name=product
根据超链接定位
link=场景
根据css定位
a#top-btn-login
button.btn.btn-lg.btn-primary.mgl160
css=input[class='ui-input'][name='password']
根据xpath定位
//button[@class='btn btn-lg btn-primary mgl160']
//input[@class='ui-input' and @name='password']
//header[@class='navbar']/div/nav/ul/li[3]/a
三、元素定位小插件
katalon recorder插件
Try xpath插件
四、模拟页面操作
1.页面跳转
1 import org.openqa.selenium.WebDriver; 2 import org.openqa.selenium.chrome.ChromeDriver; 3 4 public class Test001 { 5 public static void main(String[] args) { 6 System.setProperty("webdriver.chrome.driver", "E:\\BrowserDriver\\chromedriver.exe"); 7 WebDriver driver = new ChromeDriver();//调用谷歌浏览器控件 8 driver.get("http://www.eteams.cn/"); 9 } 10 }
2.鼠标点击
1 import org.openqa.selenium.By; 2 import org.openqa.selenium.WebDriver; 3 import org.openqa.selenium.chrome.ChromeDriver; 4 5 public class Test001 { 6 /** 7 * @param args 8 */ 9 public static void main(String[] args) { 10 System.setProperty("webdriver.chrome.driver", "E:\\BrowserDriver\\chromedriver.exe"); 11 WebDriver driver = new ChromeDriver(); 12 driver.get("http://www.eteams.cn/"); 13 // 点击登录按钮 14 driver.findElement(By.id("top-btn-login")).click(); 15 } 16 }
3.键盘输入
1 import org.openqa.selenium.By; 2 import org.openqa.selenium.WebDriver; 3 import org.openqa.selenium.chrome.ChromeDriver; 4 5 public class Test001 { 6 /** 7 * @param args 8 */ 9 public static void main(String[] args) { 10 System.setProperty("webdriver.chrome.driver", "E:\\BrowserDriver\\chromedriver.exe"); 11 WebDriver driver = new ChromeDriver(); 12 driver.get("http://www.eteams.cn/"); 13 // 点击登录按钮 14 driver.findElement(By.id("top-btn-login")).click(); 15 // 输入账号,密码,点击登录 16 driver.findElement(By.id("username")).sendKeys("test0001@126.com"); 17 driver.findElement(By.id("password")).sendKeys("test12434"); 18 driver.findElement(By.xpath("//button[@class='btn btn-lg btn-primary mgl160']")).click(); 19 } 20 }
4.键盘组合输入
1 driver.findElement(By.xpath("//body")).sendKeys(Keys.chord(Keys.CONTROL, "a"));
5.Iframe跳转
1 // 跳进文本内容编辑第一个iframe 2 driver.switchTo().frame(docManagePo.neededitIframe()); 3 4 //从iframe跳转回首页 5 driver.switchTo().defaultContent();
五、时间等待
1 //1.设置休眠时间 2 Thread.sleep(3000); 3 4 //2.全局的隐式等待 5 driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 6 7 //3.指定控件的显示等待 8 WebDriverWait wait = new WebDriverWait(driver, 60); 9 wait.until(ExpectedConditions.elementToBeClickable(portalPagePo.docment()));
六、参数化
1.通过配置文件参数化
1 import java.io.FileInputStream; 2 import java.io.FileNotFoundException; 3 import java.io.IOException; 4 import java.util.Properties; 5 6 /*** 7 * 读取配置文件工具类 8 * @author xiaolin 9 * 10 */ 11 public class ReadForConfigUtils { 12 public Properties pro = null; 13 14 /*** 15 * 构造方法通过反射来读取配置文件,不用写相对路径 16 */ 17 public ReadForConfigUtils() { 18 try { 19 pro = new Properties(); 20 FileInputStream file = new FileInputStream("C:\\seleniumWorkspace\\end2endproject\\src\\resources\\GlobalData.properties"); 21 pro.load(file); 22 //pro.load(ReadForConfigUtils.class.getClassLoader().getResourceAsStream("GlobalData.properties")); 23 } catch (IOException e1) { 24 e1.printStackTrace(); 25 } 26 27 } 28 29 30 public String getKeyValue(String key) { 31 String value = pro.getProperty(key); 32 33 return value; 34 } 35 36 37 public static void main(String[] args) { 38 ReadForConfigUtils utils = new ReadForConfigUtils(); 39 String username = utils.getKeyValue("url"); 40 System.out.println(username); 41 } 42 }
2.通过excel文件参数化
1 import java.io.FileInputStream; 2 import java.io.IOException; 3 4 import org.apache.poi.xssf.usermodel.XSSFCell; 5 import org.apache.poi.xssf.usermodel.XSSFRow; 6 import org.apache.poi.xssf.usermodel.XSSFSheet; 7 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 8 9 /**** 10 * 读书Excel文件的数据,并以二维数组的形式返回 11 * @author xiaolin 12 * 13 */ 14 public class GetExcelDataUtil { 15 public Object[][] getExcelData(String excelPath,String sheetName) throws IOException { 16 // 使用Java的IO类从磁盘中读取excel文件 17 FileInputStream fs = new FileInputStream(excelPath); 18 // 创建一个XSSFWorkBook对象 19 XSSFWorkbook wb = new XSSFWorkbook(fs); 20 // 获取指定的sheet页 21 XSSFSheet sh = wb.getSheet(sheetName); 22 // 总行数是根据下标为0开始的,比如行数为3行,则值为2 23 // 总列数就是实际的列数,比如列数为2列,则值为2 24 // 获取总列数 25 int totalOfCols = sh.getRow(0).getLastCellNum(); 26 // 获取总行数 27 int totalOfRows = sh.getLastRowNum(); 28 // 定义一个二维数组来存放 29 Object[][] excelDatas = new Object[totalOfRows][totalOfCols]; 30 for (int i = 1; i < totalOfRows + 1; i++) { 31 // row和cell都是从0开始 32 // 获取指定行的数据 33 XSSFRow row = sh.getRow(i); 34 for (int j = 0; j < totalOfCols; j++) { 35 // 获取指定单元格的数据 36 XSSFCell cell = row.getCell(j); 37 excelDatas[i - 1][j] = cell.getStringCellValue(); 38 System.out.println("excelDatas[" + (i) + "][" + j + "]:" + excelDatas[i - 1][j]); 39 } 40 41 } 42 return excelDatas; 43 } 44 }