国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

和我一起學 Selenium WebDriver(2)——入門篇

2019-11-06 06:40:40
字體:
來源:轉載
供稿:網友
【1. 加入 jUnit】 Selenium 環境搞定,接下來就要想辦法讓我們的測試步入正軌了,對于 java 來說,用上 jUnit 是很方便的,maven 項目加入 jUnit 也是輕而易舉,稍微修改一下 pom.xml 就可以了<PRoject xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Selenium2Test</groupId> <artifactId>Selenium2Test</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.25.0</version> </dependency> <dependency> <groupId>com.Opera</groupId> <artifactId>operadriver</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.opera</groupId> <artifactId>operadriver</artifactId> <version>0.16</version> <exclusions> <exclusion> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-remote-driver</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement></project>把上一篇中測試 Firefox 的代碼拿來按照 jUnit 的結構適當修改一下,就可以直接利用 jUnit 進行測試了package lesson2;import java.util.List;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.support.ui.ExpectedCondition;import org.openqa.selenium.support.ui.WebDriverWait;public class ExampleJunit { static WebDriver driver; @BeforeClass public static void init() { System.out.println("init..."); // 如果你的 FireFox 沒有安裝在默認目錄,那么必須在程序中設置 System.setProperty("webdriver.firefox.bin", "D://Program Files//Mozilla Firefox//firefox.exe"); // 創建一個 FireFox 的瀏覽器實例 driver = new FirefoxDriver(); } @Test public void test() { // 讓瀏覽器訪問 zTree Demo driver.get("http://www.ztree.me/v3/demo/cn/core/standardData.html"); // 等待 zTree 初始化完畢,Timeout 設置10秒 (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { WebElement element = driver.findElement(By.id("treeDemo")); return element.findElement(By.tagName("a")) != null; } }); WebElement element = driver.findElement(By.id("treeDemo")); List<WebElement> elements = element.findElements(By.tagName("li")); // 顯示生成的節點DOM 數量 System.out.println("treeNode DOM length = " + elements.size()); } @AfterClass public static void destory() { System.out.println("destory..."); //關閉瀏覽器 driver.quit(); }}注意:如果在一個 java 文件中的 @Test 比較多,那么需要注意 @Before / @After 和 @BeforeClass / @AfterClass 是不一樣的,前者是每一個 @Test 執行前后都會運行;后者只執行一次(詳細請參考 jUnit 的文檔)。 【2. 執行 js】 想測試 zTree ,那么大量的測試工作都是要依靠 js 的,所以讓 Selenium 與 js 通信是至關重要的,查一下文檔,建立起來簡單的通信是不難的。((JavascriptExecutor)driver).executeScript("var a = 0;");

只要在這里面把需要執行的 js 寫好就可以了,不過問題也就來了:

1、executeScript 執行 js 時應該是一個閉包的環境,所以這里面 var 定義的變量是局部變量,不可能是全局對象,使用此變量的方法都要在這一個 executeScript 里面寫好全部代碼。2、一個 executeScript 只能 返回一個Object,如果你要做同一個測試,返回一個 JSON 對象中的多個值,難道要同一段代碼復制好幾遍嗎? 這樣當然不是個好的解決方案,所以我們可以利用 window 實現全局變量,這樣可以將一個復雜的 executeScript 分解為多個簡單的 executeScript 了。3、executeScript 的返回值是 Object,在 API 中有詳細的描述 Object 與 js 值的對應關系,但注意可是不能直接返回 JSON 對象的。

js 返回 HTML element, Object 可以轉換為一個 WebElementjs 返回 decimal,Object 可以轉換為一個 Doublejs 返回 non-decimal number, Object 可以轉換為一個 Longjs 返回 boolean, Object 可以轉換為一個 Booleanjs 返回 其他對象, Object 可以轉換為一個 Stringjs 返回 array, Object 可以轉換為一個 List<Object>.js 沒有返回值 或 返回 null, executeScript 的返回值就是 null詳細情況建議大家直接參閱 API 文檔 package lesson2;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.support.ui.ExpectedCondition;import org.openqa.selenium.support.ui.WebDriverWait;public class ExampleJs { static WebDriver driver; @BeforeClass public static void init() { System.out.println("init..."); // 如果你的 FireFox 沒有安裝在默認目錄,那么必須在程序中設置 System.setProperty("webdriver.firefox.bin", "D://Program Files//Mozilla Firefox//firefox.exe"); // 創建一個 FireFox 的瀏覽器實例 driver = new FirefoxDriver(); } @Test public void test() { // 讓瀏覽器訪問 zTree Demo driver.get("http://www.ztree.me/v3/demo/cn/core/standardData.html"); // 等待 zTree 初始化完畢,Timeout 設置10秒 (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { WebElement element = driver.findElement(By.id("treeDemo")); return element.findElement(By.tagName("a")) != null; } }); System.out.println("start...javascript");// String name =(String) ((JavascriptExecutor)driver).executeScript("return $.fn.zTree.getZTreeObj('treeDemo').getNodes()[0].name;");// Long rootCount = (Long) ((JavascriptExecutor)driver).executeScript("return $.fn.zTree.getZTreeObj('treeDemo').getNodes().length;"); //直接 var 定義得到的對象并不是全局對象,這么執行會出錯的// ((JavascriptExecutor)driver).executeScript("var zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');");// String name =(String) ((JavascriptExecutor)driver).executeScript("return zTreeObj.getNodes()[0].name;");// Long rootCount = (Long) ((JavascriptExecutor)driver).executeScript("return zTreeObj.getNodes().length;"); //利用 window 實現全局對象 ((JavascriptExecutor)driver).executeScript("window.zTreeObj = $.fn.zTree.getZTreeObj('treeDemo');"); String name =(String) ((JavascriptExecutor)driver).executeScript("return window.zTreeObj.getNodes()[0].name;"); Long rootCount = (Long) ((JavascriptExecutor)driver).executeScript("return window.zTreeObj.getNodes().length;"); // 顯示js 的結果 System.out.println("treeObj[0].name = " + name); System.out.println("root nodes count = " + rootCount); } @AfterClass public static void destory() { System.out.println("destory..."); //關閉瀏覽器 driver.quit(); }}附錄: Selenium 的 java API文檔: http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html?index-all.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北海市| 西乡县| 武清区| 林甸县| 大城县| 临泽县| 措勤县| 娄烦县| 伊宁县| 镇原县| 阿鲁科尔沁旗| 嵊州市| 金秀| 登封市| 兰坪| 徐汇区| 南宁市| 合作市| 蕲春县| 开江县| 邓州市| 孝感市| 青州市| 宣化县| 龙海市| 年辖:市辖区| 保山市| 齐齐哈尔市| 溧水县| 龙州县| 根河市| 囊谦县| 大理市| 安平县| 台湾省| 长泰县| 曲周县| 吴旗县| 郁南县| 深泽县| 南岸区|