17個網站自動化實務常問到的問題

17個網站自動化實務常問到的問題

這篇文章主要整理筆者實務上、學員上課、專案輔導應用上常被問到的問題。這裡做一些會整與摘要說明。

1.什麼是 WebDriver

簡單來說,Selenium WebDriver 就是程式語言與瀏覽器溝通的翻譯師

程式語言可以使用 (Java, Python, C# or Ruby) 就可以與瀏覽器 (IE, Chrome, FireFox, Opera, Safari)等溝通。達到操作與自動化測試網站的目的。

 

2.什麼是 Locators?

Locators主要是 Selenium用來定位網頁元件的位置。selenium不是靠座標來知道網頁元件的位子。

所以 Selenium主要靠的就是 locators。例如Id,name,xpath,dom,css,class,tagname。Java範例程式如下:

driver.findElement(By.id(“HTMLid”));

driver.findElement(By.name(“HTMLname”));

driver.findElement(By.cssSelector(“cssLocator”));

driver.findElement(By.xpath(“XPathLocator));

 

3. Ajax動態網頁

筆者經常被問到的是,如何處理動態網頁元件,例如用 Ajax開發。

什麼是 Ajax的網頁呢? 簡單來說網頁不需要 reload就可以變化網頁上的一些狀態。

例如:Facebook 上就有很多網頁是 Ajax。網頁不需要 reload,根據網頁輸入的資料,網頁就相對應的顯示。

對於這樣動態頁面的呈現,Selenium處理上主要透過兩種”等待”

Implicit wait : (這種方式又稱為預設等待時間)

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

Explicit wait:   WebDriverWait, FluentWait (這種方式是特定等待某個元件出現,原則上比較建議這種方法。)

WebElement strr = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementLocated(By.xpath(“//*[@id=’name’]”)));

 

4.多個視窗如何處理?

開啟的視窗無論是 New Window 或是新  New Tab,都可以利用 Selenium處理

String window1 = driver.getWindowHandle();

driver.switchTo().window(Window1);

5.如何處理 Alert?

// 切換到該 alert

Alert alert = driver.switchTo().alert();

 

// 取得 alert上的文字

alert.getText();

// 按下 Alert 的ok

alert.accept();

 

6.如何擷取畫面並存檔?

這個很常用的原因是因為,我們希望自動化測試過程中,將當下自動化測試操作步驟的畫面存檔

之後,如果測試結果有問題,我們可以用這些存檔的畫面了解測試過程中所發生的問題。

File srcImg = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

FileUtils.copyFile(srcImg,new File(“d:\\screenShot.jpeg”));

 

7.Selenium Web Driver 有沒有什麼限制?

  • 不支援 windows Application。例如:小算盤、小作家等。
  • 沒有內建的測試報告。通常透過其他的unitTest測試架構,例如Java的 TestNG
  • 新版的瀏覽器,通常也需要相對應的 WebDriver的更新。因此,會有一些時間上的落差。

 

8.HTMLUnitDriver 是什麼瀏覽器?

這個 其實不是瀏覽器,這是 Selenium內建的一種模擬瀏覽器的”思考”引擎。

怎麼說呢? HTMLUnitDriver不會真的執行或是啟動瀏覽器,而是 Selenium模擬的執行方式。

優點是:因為是Selenium”思考”的執行方式,不需要啟動瀏覽器執行,所以執行速度非常快。

缺點是:因為這個瀏覽器執行引擎跟真實瀏覽器還是有差異,這樣的執行方式不代表真實瀏覽器執行結果。僅供參考。

 

9.如何模擬鍵盤輸入?

使用 sendKeys

例如:

element.sendKeys(” This is ENTER “, Keys.ENTER);

element.sendKeys(“This is Testing Data”);

 

10.如何選起下拉式選單中的一個值?

Select selectElement = new Select(driver.findElement(By.xpath(“Selector”)));

selectElement.selectByVisibleText(“selection value1”);

 11.如何處理 frames的網頁?

為什麼要特別注意 frames的網頁呢? 對於人來說,我們都常會直接點選網頁,而不用特別注意該網頁是否為 iframe所組成。

但是對於 Selenium來說,必須先將網頁上所有的iFrame做適當的定位,才能夠進一步選取到 iframe中的網頁元件。

driver.switchTo().frame(“frameName”);

 

如何對瀏覽器的瀏覽歷史操作前一頁或後一頁

driver.navigate().forward();

driver.navigate().back();

driver.navigate().refresh();

 

12.瀏覽器的執行速度為何?

HTMLUnitDriver因為是 Selenium模擬的所以最快。

FireFox 與 Chrome執行速度在伯仲之間。通常網頁元件的定位介於 1-2秒間。

IE 是最最慢的。網頁元件定位有可能高達 5-10秒。 

因此,執行上建議以 FireFox與 Chrome優先考量。

之後再針對 IE 特別的地方做驗證測試。

13.如果我的網站剛好只支援IE 怎麼辦?

筆者會建議還是用 fireFox 修改 userAgent的方式做自動化測試。

另一方面,可以跟網頁開發團隊討論哪些特別的功能導至只有 IE支援,其他FireFox瀏覽器不支援。

接著,再針對這些功能用IE測試。

FireFox 修改 userAgent的方式,Java 範例乘式如下:

 FirefoxProfile profile = new FirefoxProfile();

profile.addAdditionalPreference(“general.useragent.override”, “User Agent String“);

WebDriver driver = new FirefoxDriver(profile);

 

14.如何處理 SSL certificates 的問題?

筆者建議,環境設定相關問題,如果可以的話在自動化測試程式開始前就先處理好。

如果透過 selenium 的話,可以透過設定瀏覽器的 profile來解決。

 

15.Drag and Drop 的動作要如何處理?

這種複合性的動作,可以透過Selenium Actions 來處理。

[pastacode lang=”java” message=”” highlight=”” provider=”manual”]

          Actions builder = new Actions(driver);

 

          Action dragAndDrop = builder.clickAndHold(element)

                 .moveToElement(otherElement)

                 .release(otherElement)

                 .build();

 

          dragAndDrop.perform();

[/pastacode]

 

16.Selenium可以提供哪些滑鼠的操作動作?

  • click(WebElement element) – Clicks an element
  • doubleClick(WebElement element) – Double-clicks an element.
  • void mouseDown(WebElement element) – Holds down the left mouse button on an element.
  • mouseUp(WebElement element) – Releases the mouse button on an element.
  • mouseMove(WebElement element) – Moves element form current location to another element.
  • contextClick(WebElement element) – Performs a context-click (right click) on an element.

 

 

17.什麼是 GRID? 

GRID 是Selenium  分散式測試架構。這個架構讓你的測試程式可以佈署到多台機器執行。

  • Hub: 主要負責分配佈署測試程式到哪一台測試機器執行 (Node)
  • Node:負責執行selenium測試程式

 

如何啟動Selenium hub? 

java -jar selenium-server-standalone-.jar -role hub port 4444

 

如何啟動Node

java -jar selenium-server-standalone-2.42.2.jar -role node -hub http://<Hub IP>:4444/grid/register -browser browserName=firefox -port 5555

 

  • 4444 (遠端Hub的 port = 4444,預設為 4444)
  • browserName = firefox 設定 這台 Node 機器為執行 FireFox
  • Port = 5555 (Node這台機器用 port 5555 與遠端 hub port 4444溝通)

 

Leave a Reply

Your email address will not be published. Required fields are marked *