Selenium3.0 自動化測試-簡介
早在2013年的時候,Selenium官方宣佈,Selenium新的版本會在聖誕節的時候釋出。但是,他們並沒有說哪一個聖誕節釋出。
轉眼的三年過去了,目前已經發布到Selenium3.0 beta4版本,這將會是Selenium3.0正式版本前的最後一個測試版本。
儘管我對Selenium3.0比較失望(本以為它會整合移動端的自動化測試)。但是,它還是做了一些變動。
Selenium3.0的變化
最大的變化應該是去掉了Selenium RC 了,這是必然的結果。Selenium RC 是Selenium1.0的產物,Selenium2.0以WebDriver
- You’ll need to be running Java 8 to use the Java pieces of Selenium. This is the oldest version of Java officially supported by Oracle, so hopefully you’re using it already!
Selenium3.0只支援Java8版本以上,所以,如果你是用Java+Selenium開發自動化測試,那麼Java JDK需要升級到
- Support for Firefox is via Mozilla’s geckodriver.
Selenium3.0中的Firefox驅動獨立了,在Selenium3.0之前,只要在不同程式語言下安裝好Selenium就可以驅動Firefox瀏覽器執行自動化測試指令碼。這是因為不同語言下的Selenium庫中移動包含了Firefox瀏覽驅動。
然而,現在Firefox瀏覽器驅動與Selenium庫分離,單獨提供下載。
不過,geckodriver驅動要求Friefox瀏覽器必須48版本以上。
- Support for Safari is provided on macOS (Sierra or later) via Apple’s own safaridriver.
Safari是蘋果公司的瀏覽器,然後,它也早就實現了多平臺的支援,同樣可以在Windows下執行,然而,它的驅動比較有意思,是整合到Selenium Server中的。也就是說你想讓自動化測試指令碼在Safari瀏覽器上執行,必須使用Selenium Server。
- Support for Edge is provided by MS through their webdriver server.
- Only versions 9 or above of IE are supported. Earlier versions may work, but are no longer supported as MS no longer supports them.
如何使用瀏覽器驅動
讀者可以單獨建立一個目錄,如:D:/drivers/ ,把不同瀏覽器的驅動都放到該目錄。geckodriver.exe(Firefox)、chromedriver.exe(Chrome)、MicrosoftWebDriver.exe(Edge)、IEDriverServer.exe(IE)、operadriver.exe(Opera)等。
然後,將D:/drivers/新增到系統環境變最path下面即可。
Python安裝Selenium3.0
通過pip安裝,3.0.0b3為當前最新版本。
>pip install selenium==3.0.0b3
Selenium3.0的API沒有任何改變,跑個簡單的例子驗證一下。
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("Selenium2")
driver.find_element_by_id("su").click()
driver.quit()
Java安裝Selenium3.0
開啟Eclipse,匯入:如下圖:
同樣通過一個簡單的例子來驗證Selenium3.0工作正常。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import java.io.File;
public class Build_Test {
public static void main(String[] args) {
//System.setProperty("webdriver.firefox.bin", "C:\\Users\\guoji\\Desktop\\閱覽器驅動\\geckodriver-v0.11.1-win64\\fgeckodriver.exe");\\配置IE閱覽器驅動
File file = new File("C:\\Users\\guoji\\Desktop\\閱覽器驅動\\IEDriverServer_x64_2.53.1\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
// WebDriver driver = new FirefoxDriver();
WebDriver driver = new InternetExplorerDriver();\\IE
driver.get("http://www.bjguahao.gov.cn/index.htm");
driver.findElement(By.id("kw")).sendKeys("selenium java");
driver.findElement(By.id("su")).click();
driver.quit();
}
}
出現的問題:
1、Exception in thread"main" org.openqa.selenium.WebDriverException: Cannot find firefoxbinary in PATH. Make sure firefox is installed. OS appears to be: XP
Build info:version: '2.16.1', revision: '15405', time: '2012-01-05 12:30:12'
解決辦法:
我們只要在WebDriver driver = new FirefoxDriver(); 前面指定我們瀏覽器的具體資訊即可:
System.setProperty( "webdriver.firefox.bin" , "E:/Program Files/MozillaFirefox/firefox.exe" );
WebDriver driver =new FirefoxDriver();
2、Exception in thread "main"java.lang.IllegalStateException: The path to the driver executable must be setby the webdriver.chrome.driver system
property; for more information, seehttp://code.google.com/p/selenium/wiki/ChromeDriver.The latest version can be downloaded fromhttp://code.google.com/p/chromedriver/downloads/list
at com.google.common.base.Preconditions.checkState(Preconditions.java:176)
atorg.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:105)
atorg.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:75)
atorg.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:107)
at com.example.tests.Selenium2ForChrome.main(Selenium2ForChrome.java:18)
暫時還沒解決好。
1. File file = new File("C:/Selenium/iexploredriver.exe");
2. System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
3. WebDriver driver = new InternetExplorerDriver();
4、Exception in thread "main"org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launchingInternet Explorer. Browser zoom level
was set to 119%. It should be set to 100%(WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5.98 seconds
錯誤原因:IE瀏覽器的比例調大了,按ctrl+0,可以恢復原來的大小,即可。PS:這種錯誤真是。。。讓人無語。
5、My97DatePicker控制元件輸入日期問題
之前用的是seleniumIDE自己錄製的程式碼,結果回放的時候總是說元素找不到,整的我很頭疼,後來發現一個簡單的辦法,就是直接把值輸入日期控制元件的輸入框當中來,
1. driver.findElement(By.id("bookDay")).clear();
2. driver.findElement(By.id("bookDay")).sendKeys("2013-06-17");
不過我覺得這個方法不好,還在尋找其他辦法。
在網上找了下,有下面這個方法,問題是我看不懂。。。
1. selenium.selectFrame("relative=up");
2. //點選日期文字框
3. selenium.click("days");
4. //必須增加Thread.sleep(),不增加會報錯,提示找不到下一條命令中的元素
5. //另,嘗試使用waitForPageToLoad代替,會超時出錯;
6. Thread.sleep(5000);
7. //當前為4月,向前移兩個月
8. selenium.click("//div[@id='dpTitle']/div[2]");
9. selenium.click("//div[@id='dpTitle']/div[2]");
10. //點選2009-02-02
11. selenium.click("//td[@onclick='day_Click(2009,2,2);']");
6、Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Function
解決辦法:
把lib資料夾下的所有包都加到類庫裡