1. 程式人生 > >Selenium 2.0 WebDriver 自動化測試 使用教程 例項教程 API快速參考

Selenium 2.0 WebDriver 自動化測試 使用教程 例項教程 API快速參考

//System.setProperty("webdriver.firefox.bin", "E:/firefox/firefox.exe");
//FirefoxDriver dr = new FirefoxDriver();

============ Selenium 2.0 WebDriver API  Demo ==========

package example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

import util.Log;
import util.SeleniumUtil;

public class TestAllInOne {
	public static final String BASE_URL = "http://www.baidu.com";

	public static void main(String[] args) throws Exception {
		System.setProperty("webdriver.chrome.driver", "E:/0down/selenium/chromedriver.exe");
		
		//開啟firefox
		ChromeDriver dr = new ChromeDriver();
		
		//訪問頁面
		dr.get(BASE_URL);
//		dr.navigate().to(BASE_URL);//與dr.get()效果相同
//		dr.navigate().forward();//讓瀏覽器前進一步
//		dr.navigate().back();//讓瀏覽器後退一步
		Log.Info(dr.getPageSource());
		
		//等待頁面載入完畢,直到條件滿足
		(new WebDriverWait(dr, 10)).until(new ExpectedCondition<Boolean>() {
			public Boolean apply(WebDriver dr) {
            	Log.Info("web driver wait...");
            	int index = dr.getPageSource().indexOf("京ICP證030173號");
                if(index != -1){
                	Log.Info("web driver wait, true...");
                	return true;
                }else{
                	Log.Info("web driver wait, false...");
                	return false;
                }
            }
        });
		
		//等待頁面載入完畢,直到條件滿足,一個while迴圈,也挺簡單的吧
		/*
		while(true){
			 Log.Info("wait for...");
			int index = dr.getPageSource().indexOf("京ICP證030173號");
            if(index != -1){
            	Log.Info("wait for, true...");
            	break;
            }
            Thread.sleep(1 * 1000);
		}*/
		
		//等待元素載入完成
//		(new WebDriverWait(dr, 10)).until(
//			ExpectedConditions.presenceOfElementLocated(By.id("kw"))
//		);
		
		//等待元素載入完成,並可點選
//		WebDriverWait wait = new WebDriverWait(dr, 10);
//		wait.until(ExpectedConditions.elementToBeClickable(By.id("su")));
		
		//全域性性的影響,只要WebDriver不消失,每隔10秒檢查元素是否載入完成,直到載入完成。
//		dr.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//		dr.get("http://somedomain/url_that_delays_loading");
//		dr.findElement(By.id("myDynamicElement"));
		
//		WebElement we = dr.findElement(By.id("kw"));
//		we.sendKeys("selenium");
//		we.click();
		
//		dr.findElement(By.id("元素id"));//最常用
//		dr.findElement(By.className("class名稱"));//比較常用
//		dr.findElement(By.tagName("tag名稱"));//比較常用
//		dr.findElement(By.cssSelector("css選擇器"));//比較常用
//		dr.findElement(By.name("元素的name屬性"));//比較常用
//		dr.findElement(By.linkText("超連結的內容"));//不常用
//		dr.findElement(By.partialLinkText("超連結的部分內容"));//不常用
//		dr.findElement(By.xpath("xpath表示式"));//不常用
		
		//1:用java從文字中讀取jQuery,並用WebDriver載入jQuery
		SeleniumUtil.LoadAndExecuteJQuery(dr);
		//2:用WebDriver執行你寫的jQuery程式碼,可以返回單個元素,也可以返回元素陣列,或無返回值
		//執行你的jQuery程式碼,既然能執行自已的jQuery程式碼,就能做任何事情了
		dr.executeScript("$('#kw').val('selenium'); $('#kw').val($('#kw').val() + ' java');");
		//也可以用WebDriver API進行頁面元素的操作
		WebElement el = dr.findElement(By.id("kw"));
		el.sendKeys("selenium java");
		dr.findElement(By.id("su")).click();
		
		//WebDriver專用的select下接框處理類
		/*
		List<WebElement> elList = dr.findElements(By.tagName("select"));
		if(elList != null && elList.size() > 0){
			Select select = new Select(elList.get(0));
			select.deselectAll();
			select.selectByVisibleText("Edam");
			select.selectByIndex(1);
			select.selectByValue("10010");
		}*/
		
		//window和frame的切換
		/*
		dr.switchTo().window("xxName");
		dr.switchTo().frame("xxName");
		*/
		
		//瀏覽器自帶的alert彈出框的處理
		/*
		Alert alert = dr.switchTo().alert();
		if(alert != null){
			alert.accept();
			alert.dismiss();
			alert.sendKeys("collonn");
		}*/
		
		/*
		//用jQuery查詢一個元素
		WebElement wea = (WebElement)dr.executeScript("return $('#kw').get(0);");
		//用jQuery查詢一組元素
		List<WebElement> weaList = (List<WebElement>)dr.executeScript("return $('.stu_info').get();");
		//返回Boolean
		Boolean flagB = (Boolean)dr.executeScript("return true;");
		//返回Double
		Double flagD = (Double)dr.executeScript("return 12.12;");
		//返回Long
		Long flagL = (Long)dr.executeScript("return 123;");
		//返回String
		String flagS = (String)dr.executeScript("return 'collonn';");
		//返回String陣列
		List<String> flagSs = (List<String>)dr.executeScript("var ary = ['a', 'b', 'c']; return ary;");
		*/
		
		//儲存網面截圖
		SeleniumUtil.TakeScreenshot(dr, null);
		
		//關閉瀏覽器
		dr.quit();
	}

}