今天又被坑了一把,不知誰把 Slave 機的火狐瀏覽器版本升級為了 48 的版本,導致網頁自動化測試腳本無法啟動火狐的瀏覽器,相關的網頁自動化腳本全線飄紅(可惜不是股票,哈哈哈...),報版本不兼容的錯誤(當前 selenium-server 版本為 2.53.1,火狐升級后版本為 48.0.2)。
查看了一下,發現 Selenium 3 也在眾所期望中登場了,從其官網的更新歷史可知其主要特性如下所示:
- 1、全面支持JDK8。畢竟JDK8是Oracle官方支持的版本,同時若想使用 java binding則必須使用JDK8了。預計selenium-standalone-server后續也會運行在 JDK8 上;
- 2、取消 Selenium RC 的支持,全面回歸 WebDriver 協議;
- 3、通過 Mozilla 官方的 geckodriver 支持 Firefox。雖然之前谷大爺實現原生支持了火狐,但畢竟不是火狐自己實現的。同時新版本的火狐也更新了其新的引擎,google原生的驅動未實現新引擎的支持,所以 geckodriver 的出現也是一個必然。在 Selenium 3 中系統特性 webdriver.firefox.marionette 也進行了強制設定。
- 4、通過微軟官方的ms webdriver支持 Edge 瀏覽器,注意僅支持 Version 9+。又是一個官方版本哦 ^_^,
- 5、支持 Mac OS(Safari 10+),支持官方的 safaridriver,由此看出 Apple 官方也買了 webdriver 協議的單哦 ^_^。是否由此可見 WebDriver 協議一統江湖的美好前景了,哈哈哈。。。
Selenium 3.x 在啟動 Firefox 48.x 的時候,必須下載 geckodriver.exe 驅動,並將其路徑配置在 Path 變量中。
下面是Selenium3啟動Firefox 48.x 的簡單示例,供各位參考。
1 /**
2 * Aaron.ffp Inc. 3 * Copyright (c) 2004-2016 All Rights Reserved. 4 */
5 package ffp.demo.webdriver; 6
7 import org.openqa.selenium.Alert; 8 import org.openqa.selenium.By; 9 import org.openqa.selenium.WebDriver; 10 import org.openqa.selenium.firefox.FirefoxDriver; 11 import org.openqa.selenium.os.WindowsUtils; 12 import org.openqa.selenium.remote.DesiredCapabilities; 13 import org.testng.annotations.Test; 14
15 /**
16 * <strong>Selenium3 啟動 Firefox 48</strong><br> 17 * <br> 18 * @author Aaron.ffp 19 * @version V1.0.0: ffp-demo ffp.demo.webdriver DemoSelenium3.java, 2016-09-17 17:49:55.933 Exp $ 20 */
21 public class DemoSelenium3 { 22 String url = "http://localhost:8080/ffp-demo/res/main/webdriver/DemoAlert.html"; 23
24 private WebDriver driver; 25
26 @Test 27 public void test_alert() throws InterruptedException { 28 DesiredCapabilities capabilities = DesiredCapabilities.firefox(); 29 capabilities.setCapability("marionette", true); 30
31 this.driver = new FirefoxDriver(capabilities); 32
33 this.driver.manage().window().maximize(); 34 this.driver.get(this.url); 35
36 this.driver.findElement(By.xpath("//input[@class='alert']")).click(); 37 Alert alert = this.driver.switchTo().alert(); 38
39 System.out.println(alert.getText()); 40
41 Thread.sleep(5000); 42
43 alert.accept(); 44
45 this.driver.switchTo().defaultContent(); 46
47 Thread.sleep(5000); 48
49 this.driver.findElement(By.xpath("//input[@class='alert']")).click(); 50
51 Thread.sleep(5000); 52
53 WindowsUtils.killByName("geckodriver.exe"); 54 } 55 }
執行日志如下所示:
九月 17, 2016 6:42:22 下午 org.openqa.selenium.remote.ProtocolHandshake createSession 信息: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
1474108943366 Marionette INFO Listening on port 59022
1474108944547 Marionette INFO startBrowser dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108944558 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 九月 17, 2016 6:42:24 下午 org.openqa.selenium.remote.ProtocolHandshake createSession 信息: Detected dialect: W3C 1474108944887 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108944995 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108945360 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108945383 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108945433 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 這是一個:彈出框(警示、提示) 1474108950462 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108955570 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108955577 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 1474108955590 Marionette INFO sendAsync dd016983-5b27-4343-bcbb-4ef21d391ba8 PASSED: test_alert
寫在后續:
關於是否要升級?可根據各自當前的自動化測試需求進行決定,若是需要測試Edge、Safari及Firfox高版本(Version 48+),那么升級就成了一種必要;否則,我個人覺得當前無需升級。升級與否,見仁見智吧。
相應的腳本源碼文件分享鏈接:https://yunpan.cn/ckrsnINJhm3cw 訪問密碼 3ae9
至此,Selenium2學習-042-Selenium3啟動Firefox Version 48.x瀏覽器(ff 原生 geckodriver 誕生) 順利完結,希望此文能夠給初學 Selenium 的您一份參考。
最后,非常感謝親的駐足,希望此文能對親有所幫助。熱烈歡迎親一起探討,共同進步。非常感謝! ^_^
