本人在使用selenium做測試的時候,封裝了很多方法,由於工作原因估計很長時間不會更新方法庫了,中間關於js的部分還差一些沒有完善,其中設計接口的部分暫時就先不發了,以後有機會在更新。
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();
}
}