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%in
在命令行输入:mvn –version,出现如下,则表示安装成功
4.在Eclipse下配置Maven
在Eclipse菜单WindowprefencesMavenInstallation窗口中点击Add,添加Maven文件所在路径
在Eclipse菜单WindowprefencesJavaInstalled JRES路径下,确认安装的是jdk不是jre,否则会报错
5.Eclipse中创建一个Maven项目
Eclipse-->NewOtherMavenMaven Project
6.Eclipse安装TestNG
打开菜单helpInstall 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 }

 

原文地址:https://www.cnblogs.com/cjxxl1213/p/12733214.html