本人在使用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(); } }