selenium2java基本方法二次封裝

本人在使用selenium作測試的時候,封裝了不少方法,因爲工做緣由估計很長時間不會更新方法庫了,中間關於js的部分還差一些沒有完善,其中設計接口的部分暫時就先不發了,之後有機會在更新。java

package soucrce;
 
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
//import org.openqa.selenium.chrome.*;
//import org.openqa.selenium.ie.*;
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
 
public class SelLibrary extends SourceCode{
	private static SelLibrary library = new SelLibrary();
	public static SelLibrary getInstance() {
		return library;
	}
	public static WebDriver driver = getDrive();
//	public static WebDriver driverH5 = getDriveH5();
	public static WebDriver getDrive() {
		/* 谷歌瀏覽器
		System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.get("http://www.baidu.com/");
		*/
		FirefoxProfile profile = new FirefoxProfile();
		profile.setPreference("browser.download.manager.showWhenStarting", false);//是否顯示下載進度框
		profile.setPreference("browser.offline-apps.notify", false);//網站保存離線數據時不通知我
		profile.setPreference("browser.helperApps.alwaysAsk.force", false);//應用程序設置不詢問
		profile.setPreference("browser.download.folderList", 0);//設置下載地址0是桌面;1是「個人下載」;2是自定義
		profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream, application/vnd.ms-excel, text/csv, application/zip, application/msword");
		profile.setPreference("dom.webnotifications.enabled", false);//容許通知			
		WebDriver driver = new FirefoxDriver(profile);//啓動火狐瀏覽器
		driver.manage().window().maximize();//設置窗口大小
		driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);//設置頁面加載超時
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//設置查詢組件等待時間
		return driver;
	}
	/*
	 *此爲H5頁面方法,暫不使用
	public static WebDriver getDriveH5() {
		// 谷歌瀏覽器
//		System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
//		WebDriver driver = new ChromeDriver();
		FirefoxProfile profile = new FirefoxProfile();
		profile.setPreference("browser.download.manager.showWhenStarting", false);//是否顯示下載進度框
		profile.setPreference("browser.offline-apps.notify", false);//網站保存離線數據時不通知我
		profile.setPreference("browser.helperApps.alwaysAsk.force", false);//應用程序設置不詢問
		profile.setPreference("browser.download.folderList", 0);//設置下載地址0是桌面;1是「個人下載」;2是自定義
		profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream, application/vnd.ms-excel, text/csv, application/zip, application/msword");
		profile.setPreference("dom.webnotifications.enabled", false);//容許通知	
		WebDriver driver = new FirefoxDriver(profile);//啓動火狐瀏覽器
		driver.manage().window().setSize(new Dimension(435, 773));//設置窗口大小
		driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);//設置頁面加載超時
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//設置查詢組件等待時間
		return driver;
	}
	*/
	public final String LINE = "\r\n";
	public final String testAppURL = "api.dev.chaojizhiyuan.com";
	public final String appURL = "api.gaotu100.com";
	public final String testWebURL = "beta-web.gaotu100.com";
	public final String smile = "^_^";
	public final String sad = "*o*";
	//截圖命名爲當前時間保存桌面
	public void takeScreenshotByNow() throws IOException {
		File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
		String file = "C:\\Users\\fankaiqiang\\Desktop\\888\\picture\\321\\"+getNow()+".png";
		FileUtils.copyFile(srcFile,new File(file));
	}
	//截圖重命名保存至桌面
	public void takeScreenshotByName(String name) throws IOException {
		File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
		String file = "C:\\Users\\fankaiqiang\\Desktop\\888\\picture\\321\\"+name+".png";
		FileUtils.copyFile(srcFile,new File(file));
	}
	//經過id獲取元素並點擊
	public void findElementByIdAndClick(String id) {
		driver.findElement(By.id(id)).click();
	}
	public void findElementByNameAndClick(String name) {
		findElementByName(name).click();
	}
	//根據文本獲取元素並點擊
	public void findElementByTextAndClick(String text) {
		driver.findElement(By.linkText(text)).click();
	}
	//根據文本模糊查找
	public void findElementByPartiaTextAndClick(String text) {
		driver.findElement(By.partialLinkText(text)).click();
	}
	//根據xpath獲取元素
	public WebElement findElementByXpath(String xpath) {
		return driver.findElement(By.xpath(xpath));
	}
	public WebElement findElementByTag(String tag) {
		return driver.findElement(By.tagName(tag));
	}
	//根據id獲取元素
	public WebElement findElementById(String id) {
		return driver.findElement(By.id(id));
	}
	//根據id獲取元素清除文本寫入文本
	public void findElementByIdAndClearSendkeys(String id1 , String id2, String text) {
		driver.findElement(By.id(id1)).clear();
		driver.findElement(By.id(id2)).sendKeys(text);
	}
	public void findElementByIdAndClearSendkeys(String id, String text) {
		driver.findElement(By.id(id)).clear();
		driver.findElement(By.id(id)).sendKeys(text);
	}
	public void findElementByIdAndClearSendkeys(String id, int num) {
		driver.findElement(By.id(id)).clear();
		driver.findElement(By.id(id)).sendKeys(num+"");
	}
	public void findElementByNameAndClearSendkeys(String name, String text) {
		findElementByName(name).clear();
		findElementByName(name).sendKeys(text);
	}
	public void findElementByNameAndClearSendkeys(String name, int num) {
		findElementByName(name).clear();
		findElementByName(name).sendKeys(num+"");
	}
	//經過xpath獲取元素點擊
	public void findElementByXpathAndClick(String xpath) {
		driver.findElement(By.xpath(xpath)).click();
	}
	//經過class獲取元素並點擊
	public void findElementByClassNameAndClick(String name) {
		driver.findElement(By.className(name)).click();
	}
	public WebElement findElementByClassName(String name){
		return driver.findElement(By.className(name));
	}
	//獲取一組元素
	public List<WebElement> findElementsByClassName(String className) {
		return driver.findElements(By.className(className));
	}
	//根據text獲取一組頁面元素
	public List<WebElement> findElementsByText(String text) {
		return driver.findElements(By.linkText(text));
	}
	public List<WebElement> findElementsByPartialText(String text) {
		return driver.findElements(By.partialLinkText(text));
	}
	//根據id獲取一組頁面元素
	public List<WebElement> findElementsById(String id) {
		return driver.findElements(By.id(id));
	}
	//根據tagName獲取一組頁面元素
	public List<WebElement> findElementsByTag(String tag) {
		return driver.findElements(By.tagName(tag));
	}
	public WebElement findElementByText(String text){
		return driver.findElement(By.linkText(text));
	}
	public WebElement findElementByPartialText(String text){
		return driver.findElement(By.partialLinkText(text));
	}
	public WebElement findElementByName(String name) {
		return driver.findElement(By.name(name));
	}
	//輸出cookies信息
	public void outputCookie() {
		Set<Cookie> cookie = driver.manage().getCookies();
		System.out.println(cookie);
//		Cookie abc = new Cookie("", "");
//		driver.manage().addCookie(abc);
	}
	public void addCookie(Map<String, String> args) {
		Set<String> keys = args.keySet();
		for(String key : keys){
			driver.manage().addCookie(new Cookie(key, args.get(key)));
		}
	}
	//測試開始
	public void testBegin() {
		outputBegin();
		outputNow();
	}
	//測試結束
	public void testOver(boolean key) {
		if (key) {
		exit();
		}
		outputNow();
		outputOver();
		driver.quit();
	}
	//退出登陸
	public void exit() {
		output("暫未實現退出方法!");
	}
	//判斷元素是否存在
	public boolean exists(By selector) {
		driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//設置查詢組件等待時間
		try {
			driver.findElement(selector);
			driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//設置查詢組件等待時間
			return true;
		} catch (Exception e) {
			driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//設置查詢組件等待時間
			return false;
		}
	}
	//經過js點擊
	public void clickByJs(WebElement element) {
		JavascriptExecutor js = (JavascriptExecutor) driver;
		js.executeScript("arguments[0].click();", element);
		//第二種點擊方法
//		((JavascriptExecutor) driver).executeScript("arguments[0].click()", question);
	}
	//經過xpath獲取元素用js點擊
	public void clickByJsByXpath(String xpath) {
		clickByJs(driver.findElement(By.xpath(xpath)));
	}
	public void clickByJsByText(String text) {
		clickByJs(findElementByText(text));
	}
	public void clickByJsById(String id) {
		clickByJs(findElementById(id));
	}
	public void clickByJsByClassName(String name) {
		clickByJs(findElementByClassName(name));
	}
	public void clickByJsByName(String name) {
		clickByJs(findElementByName(name));
	}
	//按物理按鍵
	public void pressKeyEvent(int keycode) throws AWTException {
		Robot robot = new Robot();
//		robot.keyPress(KeyEvent.VK_ENTER);//按下enter鍵
		robot.keyPress(keycode);
	}
	//經過xpath獲取元素清除文本並寫入
	public void findElementByXpathAndClearSendkeys(String xpath, String text) {
		findElementByXpath(xpath).clear();
		findElementByXpath(xpath).sendKeys(text);
	}
	public void findElementByXpathAndClearSendkeys(String xpath, int num) {
		findElementByXpath(xpath).clear();
		findElementByXpath(xpath).sendKeys(num+"");
	}
	//判斷是否有警告框
	public boolean judgeAlert(WebDriver driver) {
		try {
			driver.switchTo().alert();
			return true;
			} catch (Exception e) {
				output("沒有發現警告框!");
				return false;
				}
		}
	//獲取文本
	public String getTextByXpath(String xpath) {
		return findElementByXpath(xpath).getText();
	}
	public String getTextByClassName(String name) {
		return findElementByClassName(name).getText();
	}
	public String getTextById(String id) {
		return findElementById(id).getText();
	}
	public String getTextByName(String name) {
		return findElementByName(name).getText();
	}
	//獲取數量
	public int getNumByXpath(String xpath) {
		String num = getTextByXpath(xpath);
		return changeStringToInt(num);
	}
	public int getNumByClassName(String name) {
		String num = getTextByClassName(name);
		return changeStringToInt(num);
	}
	//經過xpath獲取classname
	public String getClassNameByXpath(String xpath) {
		return findElementByXpath(xpath).getAttribute("class");
	}
	//經過id獲取classname
	public String getClassNameById(String id) {
		return findElementById(id).getAttribute("class");
		}
	//強制刷新
	public void refresh() {
		Actions ctrl = new Actions(driver);
		ctrl.keyDown(Keys.CONTROL).perform();
		try {
			pressKeyEvent(KeyEvent.VK_F5);
		} catch (AWTException e) {
			output(sad+getNow());
			e.printStackTrace();
		}
		ctrl.keyUp(Keys.CONTROL).perform();
//		driver.navigate().refresh();
	}
//	//顯式等待
//	public void waitForWebElementByXpathAndClick(String xpath) {
//		new WebDriverWait(5).until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath)));
//		findElementByXpathAndClick(xpath);
//	}
 
	//等待元素可用再點擊
	public void waitForEnabledByXpathAndClick(String xpath) throws InterruptedException {
		boolean key = true;
		while(key){
			if (findElementByXpath(xpath).isEnabled() && findElementByXpath(xpath).isDisplayed()) {
				output(123);
				clickByJsByXpath(xpath);
//				findElementByXpathAndClick(xpath);
				key = false;
			}else{
				sleep(0);
			}
		}
	}
	//右鍵點擊
	public void	RightClickWebElement(String id) {
		Actions actions = new Actions(driver);
		actions.contextClick(findElementById(id)).perform();;
	}
	//根據classname獲取元素清除並輸入內容
	public void findElementByClassnameAndClearSendkeys(String classname, String text) {
		driver.findElement(By.className(classname)).clear();
		driver.findElement(By.className(classname)).sendKeys(text);
	}
	public void findElementByClassnameAndClearSendkeys(String classname, int num) {
		driver.findElement(By.className(classname)).clear();
		driver.findElement(By.className(classname)).sendKeys(num+"");
	}
	//根據id獲取下拉框,根據index選擇選項
	public void findSelectByIdAndSelectByIndex(String id, int index) {
		Select select = new Select(findElementById(id));
		select.selectByIndex(index);
	}
	//根據id獲取下拉框,根據value選擇選項
	public void findSelectByIdAndSelectByValue(String id, String value) {
		Select select = new Select(findElementById(id));
		select.selectByValue(value);
	}
	//根據id獲取下拉框,根據text選擇選項
	public void findSelectByIdAndSelectByText(String id, String text) {
		Select select = new Select(findElementById(id));
		select.selectByVisibleText(text);;
	}
	//根據classname獲取下拉框,根據text選擇選項
	public void findSelectByClassNameAndSelectByText(String name, String text) {
		Select select = new Select(findElementByClassName(name));
		select.selectByVisibleText(text);
	}
	//根據classname獲取下拉框,根據Value選擇選項
	public void findSelectByClassNameAndSelectByValue(String name, String value) {
		Select select = new Select(findElementByClassName(name));
		select.selectByValue(value);
		}
	//根據classname獲取下拉框,根據index選擇選項
	public void findSelectByClassNameAndSelectByIndex(String name, int index) {
		Select select = new Select(findElementByClassName(name));
		select.selectByIndex(index);
		}
	//根據name獲取下拉框,根據text選擇選項
	public void findSelectByNameAndSelectByText(String name, String text) {
		Select select = new Select(findElementByName(name));
		select.selectByVisibleText(text);
	}
	//根據name獲取下拉框,根據Value選擇選項
	public void findSelectByNameAndSelectByValue(String name, String value) {
		Select select = new Select(findElementByName(name));
		select.selectByValue(value);
		}
	//根據name獲取下拉框,根據index選擇選項
	public void findSelectByNameAndSelectByIndex(String name, int index) {
		Select select = new Select(findElementByName(name));
		select.selectByIndex(index);
		}
	//鼠標懸停
	public void moveToElementById(String id) {
		Actions actions = new Actions(driver);
		actions.moveToElement(findElementById(id));
		}
	public void moveToElementByClassName(String name) {
		Actions actions = new Actions(driver);
		actions.moveToElement(findElementByClassName(name));
	}
	//滾動到最上方
	public void scrollToTop() {
		((JavascriptExecutor)driver).executeScript("window.scrollTo(0,0);");
//		JavascriptExecutor js = (JavascriptExecutor) driver;
//		js.executeScript("window.scrollTo(0,0);");
	}
	//滾動到頁面底部
	public void scrollToBottom(String id) {
		((JavascriptExecutor)driver).executeScript("window.scrollTo(0,10000);");
	}
	//滾動到某個元素
	public void scrollToElement(WebElement element) {
		JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("arguments[0].scrollIntoView(true);", element);
	}
	//js滾動頁面內div
	public void scrollToBottomById(String id) {
		JavascriptExecutor js = (JavascriptExecutor) driver;
		js.executeScript("arguments[0].scrollTo(0, 3000);", findElementById(id));
	}
	//使用js使元素隱藏元素顯示
	public void makeDisplayById(String id) {
		JavascriptExecutor  js = (JavascriptExecutor)driver;
		js.executeScript("document.getElementById(id).style.display='block';");
	}
	public void makeElementDisplay(WebElement element) {
		JavascriptExecutor  js = (JavascriptExecutor)driver;
//		WebElement element = driver.findElement(By.xxx);
		js.executeScript("arguments[0].style=arguments[1]", element, "display: block;");
	}
	//js輸入文本
	public void inputTextByJsById(String text, String id) {
		JavascriptExecutor js = (JavascriptExecutor) driver;
		js.executeScript("arguments[0].value=\"2016-08-20\"",driver.findElement(By.id(id)));
	}
	//js輸入文本
	public void inputTextByJs(String text, WebElement element) {
		JavascriptExecutor js = (JavascriptExecutor) driver;
		js.executeScript("arguments[0].value=" + text + "\"", element);
	}
	//返回
	public void BrowserBack() {
		driver.navigate().back();
	}
	//前進
	public void BrowserForward() {
		driver.navigate().forward();
	}
}

技術類文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 如何測試機率型業務接口
  8. httpclient處理多用戶同時在線
  9. 將swagger文檔自動變成測試代碼
  10. 五行代碼構建靜態博客
  11. httpclient如何處理302重定向
  12. 基於java的直線型接口測試框架初探

非技術文章精選

  1. 爲何選擇軟件測試做爲職業道路?
  2. 成爲傑出Java開發人員的10個步驟
  3. 寫給全部人的編程思惟
  4. 自動化測試的障礙
  5. 自動化測試的問題所在
  6. 測試之《代碼不朽》腦圖

點擊查看公衆號地圖

相關文章
相關標籤/搜索