日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java编写自动化脚本_自动化脚本

發布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java编写自动化脚本_自动化脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文將介紹一個Java+TestNG+Maven+Selenium的web自動化測試腳本環境下selenium簡單線性腳本的編寫,并提供全部代碼。

文中將看到,使用selenium編寫一個能操作瀏覽器的腳本是非常容易的。而簡單線性腳本的編寫是下一步編寫頁面對象腳本的基礎。

1.在開始之前,我想明確一下,自動化測試的基本原理。

有的測試人員認為自動化測試很神秘,很神奇。恰恰相反,?自動化測試很簡單。

自動化測試,一般分三個步驟:

1)取預期結果;

2)取實際結果;

3)斷言:比較1)和2)來判斷測試是否通過;

從歷史角度來看,自動化測試的出現早于專職測試人員的出現。也就是說在開始有我們這些專門做軟件測試的測試人員之前,自動化測試已經存在了。

原因就是他?簡單。

selenium自動化測試,在自動化測試里也是屬于超級?簡單的一類。但前提是必須理解上面說的自動化測試原理,以及其他一些自動化測試設計原則。否則,我們將會看到,?簡單的項目也會失敗?。有很多由初、中級開發人員或會一點點代碼的測試人員編寫的selenium自動化測試項目,因此失敗。

2.簡單的selenium測試腳本編寫,一般也是分三個步驟:

1)定位一個元素

2)操作一個元素

3)斷言

好,這里用百度首頁的搜索做一個例子:

1 package simplewebtest.test;

2

3 import java.util.concurrent.TimeUnit;

4

5 import org.openqa.selenium.By;

6 import org.openqa.selenium.WebDriver;

7 import org.openqa.selenium.firefox.FirefoxDriver;

8 import org.testng.annotations.Test;

9

10 public classTestBaiduHome {

11

12 @Test

13 public void searchSomething(){

14

15 WebDriver driver=new FirefoxDriver();//打開Firefox; open firefox

16 driver.get("http://www.baidu.com");//打開百度open the url

17 driver.findElement(By.id("kw1")).sendKeys("GitHub");//輸入搜索關鍵字“GitHub";input search keyword

18 driver.findElement(By.id("su1")).click();//點擊搜索按鈕click the search button

19 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等頁面加載,10秒內不加載成功即報超時。waiting for 10 seconds

20 String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四條搜索結果的標題。 get the text of 4th search result

21 assert aResult.contains("GitHub");//做斷言 assertion

22 driver.findElement(By.xpath(".//*[@id='4']/h3/a")).click();//打開第四個搜索結果。Open the 4th search result on baidu

23 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等頁面加載,10秒內不加載成功即報超時。waiting for 10 seconds

24

25 //獲取所有窗口的handle,然后逐個切換,直到切換到最新窗口 switch to the new window

26 for(String winHandle : driver.getWindowHandles()){

27 driver.switchTo().window(winHandle);

28 }

29

30 String aTitle=driver.getTitle();//取新窗口的title

31 System.out.println("current widnow title is:"+aTitle);//打出來看看

32 assert aTitle.contains("GitHub");//斷言

33

34 }

35 }

View Code

本系列所有代碼https://github.com/zhangting85/simpleWebtest,

這個例子存放在src/test/java/simplewebtest/test/TestBaiduHome.java

下面逐行解釋:

WebDriver driver=new FirefoxDriver();

這里是聲明了一個 WebDriver 類型的對象引用,我給他起名叫driver;

然后讓這個driver指向WebDriver的一個子類(FirefoxDriver)的對象;

我們知道FirefoxDriver繼承自WebDriver,IEDriver也繼承自WebDriver;

就像蘋果繼承自水果,橘子也繼承自水果;

這里用了Java的向上轉型,使用子類的對象來初始化父類的引用。(注:實際上Webdriver是一個接口。)

這將產生什么效果呢?

我們在driver上調用方法的時候,都是先查找WebDriver里的方法定義,然后jvm去他的子類比如FirfoxDriver中找到其在子類中的實現,再執行的。比如FirefoxDriver的get方法和IEDriver的get方法,他們具體執行的代碼內容明顯是不一樣的。但我們的腳本,只要改變driver引用的子類,而不用改變我后面的方法調用。

也就是說,我們用firefox和用ie,除了第一句話新建對象時不一樣,后面的方法調用都是一樣的。

java會自動根據我們上面這句話里創建的對象,去選擇他應該執行的實際代碼。

這也就是JAVA里的多態,一句話記住多態:用子類對象初始化父類引用,方法調用時自動執行子類代碼,成員變量調用時自動調用父類成員變量。

以上,題外話略多,是希望測試人員不要自我放棄,寫個程序不會有多難,Java的基礎必須要掌握。

driver.get("http://www.baidu.com");

調用Webdriver的get方法,跳轉到制定的URL;

凡是這里跳轉不過去的,十有八九是因為webdriver版本太低,瀏覽器版本太高,請改上一節講的pom.xml里配置的webdriver版本號至最新版。

driver.findElement(By.id("kw1")).sendKeys("GitHub");//輸入搜索關鍵字“GitHub";input search keyword

driver.findElement(By.id("su1")).click();//點擊搜索按鈕click the search button

這里調用Webdriver的findElement方法來查找頁面元素。然后在找到的頁面元素WebElement對象上調用sendKeys方法來打字和click方法來點擊。

如果你問我這個id的值是怎么來的,那么你可以去看一下FireBug這個插件,他會替你找到每一個元素的一切屬性。

如果你要定位的元素沒有id,你還可以用className,Xpath,css,等等來定位。

另一個插件FirePath可以幫你產生任意元素的xpath表達式。

findElement方法需要一個By類型的參數。

但是代碼里我們使用了By.id("kw1")?這里的id是一個靜態方法,他的聲明是:

public static?By?id(java.lang.String?id)

所以我們調用By.id的時候,他會返回一個By類型的對象給我們。

至于下面findElement是怎樣用這個對象來查找頁面元素的,暫時不講。簡單來說,就是把我們傳入的id傳給對應的Driver,由driver去查找元素,再返回給我們。

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

很常用的一個等待頁面加載的語句。這個implicityWait是會對driver的下一個findElement調用起作用的。

百度這個搜索結果頁面很有意思,雖然我們感覺不出來,但搜索結果其實是異步顯示上去的,所以不加等待他就會找不到元素。

而后面點擊搜索結果打開一個窗口的時候我們再次用了等待。

另外,這個方法并不是對所有網頁都有效,有時我們要用一些別的等待。還有盡量不要用Thread.sleep

String aResult=driver.findElement(By.xpath(".//*[@id='4']/h3/a")).getText();//取第四條搜索結果的標題。 get the text of 4th search result

assert aResult.contains("GitHub");//做斷言 assertion

這兩句,首先去取實際結果,也就是根據某個xpath表達式找到的搜索結果元素上的Text

然后,再判斷他是否符合預期結果,即包含有“GitHub”這個字符串。

assert是TestNG提供的,這里不要用if else去判斷這個字符串。TestNG的assert結果會反映在測試報告里。

也不要自己去拋出一個代表斷言失敗的異常,TestNG會替你完成這件事。

以上兩個錯誤是中低級開發人員編寫測試框架時常犯的。

我們既然用了TestNG,請至少嘗試去用TestNG的功能。

for(String winHandle : driver.getWindowHandles()){

driver.switchTo().window(winHandle);

}

這段代碼表示切換窗口。有意思的是,他是在窗口打開后,先取出所有窗口的hanles,然后一個一個切過去。

因為新窗口必定在最后,所以不論你有幾個窗口,這段代碼總能找到最新一個窗口。如果你還需要操作老窗口,

可以事先把老窗口的Handle保存起來,以后再切回來。

以上一個簡單的線性測試腳本編寫完畢。基本的元素定位、元素操作、窗口切換、斷言都有了,你可以查看官網的文檔,了解各個api的更多方法。

熟練地編寫線性腳本大概需要個把月,有編程基礎的更快,這一篇介紹的內容基本沒有難度。下一篇介紹進階的線性腳本,包括frame,actions,關閉瀏覽器,運行javascript,WebDriverWait。

覺得不錯的可關注微信公眾號在手機上觀看,讓你用手機邊玩邊看

總結

以上是生活随笔為你收集整理的java编写自动化脚本_自动化脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。