一 BaseUI
- 工具類的基本內(nèi)容
- 點擊
- 輸入
- 啟動瀏覽器
- 關(guān)閉瀏覽器
- @Beforeclass 在所有類之前執(zhí)行
- @Afterclass 在所有類之后執(zhí)行
package com.guoyasoft.autoUI.common;
import java.io.File;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class BaseUI {
//這個變量的類型是webDriver 網(wǎng)站驅(qū)動
public WebDriver driver;
public String pageTitle;
public String pageUrl;
public BaseUI(){
}
public BaseUI(WebDriver driver){
this.driver=driver;
}
//在所有類之前執(zhí)行
@BeforeClass
public void before(){
//打開瀏覽器
// 設置環(huán)境變量陌选,指定chromedriver的路徑
System.setProperty("webdriver.chrome.driver",
"src/main/resources/selenium/driver_v236_63_65/chromedriver.exe");
// 設置瀏覽器的參數(shù)
ChromeOptions options = new ChromeOptions();
// 最大化瀏覽器
options.addArguments("--test-type", "--start-maximized");
// options.setBinary("C:/XXXXXXX/chrome.exe");
// 打開瀏覽器
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
sleep(1000);
}
@Test
@Parameters({"url"})
public void openUrl(String url){
//打開URL
driver.get(url);
sleep(1000);
}
//在所有類執(zhí)行之后執(zhí)行
@AfterClass
public void after(){
//關(guān)閉瀏覽器
sleep(2000);
//瀏覽器退出
driver.quit();
}
//封裝的線程等待方法
public static void sleep(int millis) {
try {
Thread.sleep(millis*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//封裝的截圖的方法 傳一個driver ,傳一個圖片的名字
public static void snapshot(TakesScreenshot drivername, String filename) {
// this method will take screen shot ,require two parameters ,one is
// driver name, another is file name
File scrFile = drivername.getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy
// somewhere
try {
System.out.println("save snapshot path is:c:/" + filename);
FileUtils.copyFile(scrFile, new File("c:\\" + filename));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Can't save screenshot");
e.printStackTrace();
} finally {
System.out.println("screen shot finished");
}
}
/*
* 在文本框內(nèi)輸入字符
*/
protected void text(WebElement element, String text) {
try {
if (element.isEnabled()) {
element.clear();
System.out.println("Clean the value if any in "
+ element.toString() + ".");
element.sendKeys(text);
System.out.println("Type value is: " + text + ".");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 點擊元素辜限,這里指點擊鼠標左鍵
*/
protected void click(WebElement element) {
try {
if (element.isEnabled()) {
element.click();
System.out.println("Element: " + element.toString()
+ " was clicked.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 在文本輸入框執(zhí)行清除操作
*/
protected void clean(WebElement element) {
try {
if (element.isEnabled()) {
element.clear();
System.out.println("Element " + element.toString()
+ " was cleaned.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 判斷一個頁面元素是否顯示在當前頁面
*/
protected void verifyElementIsPresent(WebElement element) {
try {
if (element.isDisplayed()) {
System.out.println("This Element " + element.toString().trim()
+ " is present.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 獲取頁面的標題
*/
protected String getCurrentPageTitle() {
pageTitle = driver.getTitle();
System.out.println("Current page title is " + pageTitle);
return pageTitle;
}
/*
* 獲取頁面的url
*/
protected String getCurrentPageUrl() {
pageUrl = driver.getCurrentUrl();
System.out.println("Current page title is " + pageUrl);
return pageUrl;
}
public void switchToNextWindow() {
String currentWindow = driver.getWindowHandle();// 獲取當前窗口句柄
Set<String> handles = driver.getWindowHandles();// 獲取所有窗口句柄
System.out.println("當前窗口數(shù)量: " + handles.size());
for (String s : handles) {
if (currentWindow.endsWith(s)) {
continue;
} else {
try {
WebDriver window = driver.switchTo().window(s);// 切換到新窗口
System.out
.println("new page title is " + window.getTitle());
break;
} catch (Exception e) {
System.out.println("法切換到新打開窗口" + e.getMessage());
}
}
}
}
//根據(jù)頁面標題切換窗口
public void switchToTitleWindow(String windowTitle) {
// 將頁面上所有的windowshandle放在入set集合當中
String currentHandle = driver.getWindowHandle();
Set<String> handles = driver.getWindowHandles();
for (String s : handles) {
driver.switchTo().window(s);
// 判斷title是否和handles當前的窗口相同
if (driver.getTitle().contains(windowTitle)) {
break;// 如果找到當前窗口就停止查找
}
}
}
}
二 方法調(diào)用
1. 不帶參
public void queryuser(){
//driver.findElement(By.xpath("http://input[@name='userName']")).sendKeys(users);
//driver.findElement(By.xpath("http://input[@type='submit']")).click();
sendkey("http://input[@name='userName']","z");
click("http://input[@type='submit']");
}
2.帶參
public void queryage(String name){
driver.findElement(By.xpath("http://input[@name='userName']")).clear();
//driver.findElement(By.xpath("http://input[@type='number'][1]")).clear();
//driver.findElement(By.xpath("http://input[@type='number'][1]")).sendKeys(age);
driver.findElement(By.xpath("http://input[@name='userName']")).sendKeys(name);
driver.findElement(By.xpath("http://input[@type='submit']")).click();
sleep(1000);
}
3.調(diào)用下拉框
public void queryeducation3(String education){
//使用findelement查找select元素 使用Webelement 對對象聲明變量進行保存
WebElement element = driver.findElement(By.xpath("http://select[@name='education']"));
//新建一個selenium 下拉框處理對象,對sele 進行處理下拉框 使用時需要傳參,傳參為定位的select下拉框
Select sele= new Select(element);
//通過自己聲明的sele進行文本類型的查詢
sele.selectByVisibleText(education);
driver.findElement(By.xpath("http://input[@type='submit']")).click();
}
三 內(nèi)置批量容器類型
1. 固定長度類型 數(shù)組
public String users [] [] ={
//先橫著第幾行,后豎著第幾列
{"zz1","xx1","cc1","aa1","ss1"},
{"zz2","xx2","cc2","aa2","ss2"},
{"zz3","xx3","cc3","aa3","ss3"},
{"zz4","xx4","cc4","aa4","ss4"},
{"zz5","xx5","cc5","aa5","ss5"}
};
@Test
public void deome(){
for (int i = 0; i < users.length; i++) {
System.out.println(users[i][0]);
System.out.println(users[i][1]);
}
}
2.變化長度的類型 列表
-
只能用來存儲單值
public void list(){
//創(chuàng)建一個list列表
List<String> list = new ArrayList<String>();
//列表添加數(shù)據(jù) list.add();
list.add("周");
list.add("楊");
list.add("陳");
list.add("周2");
list.add("吳");
System.out.println(list.get(3));
System.out.println(list.get(4));
System.out.println(list.size());
}
3.存儲鍵值對的類型
public void map(){
//Map 用來存儲鍵值對數(shù)據(jù) 取數(shù)據(jù)通過鍵值對來取
Map<String,Integer> jianzhidui=new HashMap<String, Integer>();
jianzhidui.put("周",23);
jianzhidui.put("楊",21);
jianzhidui.put("吳",22);
jianzhidui.put("王",24);
System.out.println("周的年齡是"+jianzhidui.get("周"));
System.out.println("楊的年齡是"+jianzhidui.get("楊"));
System.out.println("總共有多少條"+jianzhidui.size());
}
四 maven的作用以及原理
- 添加依賴jar包
- 管理開發(fā)依賴jar包
- 依賴第三方代碼位置本地倉庫-官方倉庫
- 官方倉庫地址:http://repo1.maven.org/maven2/
- 本地倉庫(按配置找selnium和testng)
maven配置依賴
工程中使用pom文件配置依賴
maven依賴配置 pom.xml 依賴配置
<dependency> 依賴
<groupId>org.jvnet.localizer </groupId> 域名 公司名
<artifactId>localizer </artifactId> 項目名稱
<version>1.8 </version> 版本
</dependency>
groupId一般分為多個段送讲,這里我只說兩段睦裳,第一段為域,第二段為公司名稱。域又分為org、com、cn等等許多蜡娶,其中org為非營利組織,com為商業(yè)組織映穗。舉個apache公司的tomcat項目例子:這個項目的groupId是org.apache窖张,它的域是org(因為tomcat是非營利項目),公司名稱是apache男公,artigactId是tomcat荤堪。
pom配置信息
項目依賴
插件
目標
建立檔案
項目版本
開發(fā)商
郵件列表