1. 程式人生 > >selenium頁面元素定位方法(4)——jQuery定位

selenium頁面元素定位方法(4)——jQuery定位

jQuery介紹

        jQuery是一個相容多瀏覽器的JavaScript庫,核心是write less,do more。jQuery定位方式實際上是呼叫jQuery庫的查詢功能,主要用於不能良好支援CSS定位方式的瀏覽器。如果頁面本身就引入了jQuery庫操作頁面元素,實現一些復頁面元素操作。

jQuery例項

        查詢百度頁面所有的連結元素。

package cn.om.elements;

import static org.testng.Assert.assertEquals;
import java.util.List;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;


public class JQueryTest {

	WebDriver driver;
	JavascriptExecutor js;

	@SuppressWarnings("unchecked")
	@Test
	public void jQueryTest()  {
		System.setProperty("webdriver.firefox.bin", "E:\\Mozilla Firefox\\firefox.exe");
		driver = new FirefoxDriver();
		driver.get("http://www.baidu.com");
		js = (JavascriptExecutor) driver;
		injectjQueryIfNeeded();
		List<WebElement> elements=(List<WebElement>)js.executeScript("return jQuery.find('a')");
		assertEquals(33, elements.size());
		for (int i = 0; i < elements.size(); i++) {
			System.out.println(elements.get(i).getText()+"、");
		}
		driver.close();
	}

	private void injectjQueryIfNeeded(){
		if(!JQueryLoaded()){
			injectjQuery();
		}
	}
	
	public boolean JQueryLoaded() {
		Boolean loaded;
		try{
		loaded = (Boolean) js.executeScript("return" + "jQuery()!=null");
		}catch(WebDriverException e){
			loaded = false;
		}
		return loaded;
	}
	
	public void injectjQuery(){
		js.executeScript(" var headID = " 
                + "document.getElementsByTagName(\"head\")[0];" 
                + "var newScript = document.createElement('script');" 
                + "newScript.type = 'text/javascript';" 
                + "newScript.src = " 
                + "'http://apps.bdimg.com/libs/jquery/1.6.4/jquery.min.js';" 
                + "headID.appendChild(newScript);");
	}
}

程式碼解釋:

(1)、js = (JavascriptExecutor) driver;將driver轉換為JavascriptExecutor物件。

(2)、js.executeScript("return jQuery.find('a')");在JavascriptExecutor物件的語句,函式中執行JavaScriptreturn jQuery.find('a')表示呼叫jQuery的find方法查詢頁面中的所有a標籤元素,返回結果儲存在list裡。

(3)、assertEquals(33, elements.size());此程式碼是斷言list物件elements裡面一共有33個連結物件,如果包含判斷的斷言成功,則測試執行通過;否則斷言失敗,測試用例也會被設定為執行失敗狀態。

(4)、由於頁面可能不會預設包含jQuery庫,所以在使用jQuery定位方式前必須先在頁面中插入jQuery庫。injectjQueryIfNeeded函式呼叫JQueryLoaded()判斷當前頁面是否有載入jQuery,若沒有,則執行injectjQuery函式載入。

(5)在jQuery定位時,是使用CSS表示式來進行元素定位。