selenium頁面元素定位方法(4)——jQuery定位
阿新 • • 發佈:2019-01-31
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表示式來進行元素定位。