av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

如何加速Selenium測試用例的執(zhí)行

下面,我們將主要從速度和性能兩個(gè)方面,向您介紹Selenium Web測試各項(xiàng)優(yōu)秀實(shí)踐,以便您能夠更好地加快測試并獲取測試結(jié)果。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括夏河網(wǎng)站建設(shè)、夏河網(wǎng)站制作、夏河網(wǎng)頁制作以及夏河網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,夏河網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到夏河省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

加速Selenium測試的優(yōu)秀實(shí)踐

隨著軟件產(chǎn)品的持續(xù)更新,維護(hù)和升級Selenium測試的過程會變得越來越復(fù)雜。不過,無論被測場景如何不同,下面有關(guān)Selenium的基本測試步驟都是相似的:

  1. 使用本地或遠(yuǎn)程的Selenium WebDriver去打開被測的URL。
  2. 使用諸如XPath、CssSelector、以及Linktext等恰當(dāng)?shù)腤ebSelenium定位器,來定位所需的各種WebElement。
  3. 對已定位的WebElement執(zhí)行各項(xiàng)必要的操作,并測試頁面上的斷言。
  4. 釋放WebDriver所使用的資源。

盡管Selenium測試的效率在很大程度上,取決于測試的方法和內(nèi)部結(jié)構(gòu),但是我們可以總結(jié)出如下加快執(zhí)行Selenium測試用例的各種優(yōu)秀實(shí)踐:

選擇合適的Web定位器

Selenium中的Web定位器往往被認(rèn)為是任何測試場景的基本構(gòu)建塊。為了自動化與任何Web元素的交互,我們首先應(yīng)該選對可定位WebElement的Web定位器,然后再對相應(yīng)的元素執(zhí)行適當(dāng)?shù)牟僮?。其中,XPath、CSS Selector、Name、LinkText、Partial LinkText、TagName、以及ClassName都是在Selenium中被廣泛使用的Web定位器。我們通??梢詫⑵渑cfind_element或find_elements方法一起使用。

那么,究竟哪一款Web定位器在Selenium中能夠最快地定位到元素呢?其實(shí),ID才是最快的Web定位器,畢竟Selenium WebDriver中的ID定位器,對于頁面上的每個(gè)元素來說都是唯一的。ID定位器可以返回與指定值(或字符串)相匹配的WebElement。如果頁面上存在多個(gè)具有相同ID的元素,那么document.getElementById()將返回第一個(gè)匹配的元素。主流Web瀏覽器都優(yōu)化了document.getElementById()方法,因此我們能夠以更快的速度,從DOM處提供WebElement。

如果WebElement并沒有ID屬性,那么請使用NAME屬性。而如果WebElement既沒有ID、又沒有NAME屬性,那就應(yīng)該使用CSS選擇器(Selector)的Web定位器。CSS引擎在所有主流瀏覽器中都是一致的,并且能夠通過Selenium中的CSS選擇器,來調(diào)優(yōu)它們的性能,以提供更快的元素識別和更少的測試執(zhí)行時(shí)間。因此,您在使用此類特定的Web定位器時(shí),也會鮮少遇到瀏覽器的兼容性問題。同時(shí),CSS選擇器也能適應(yīng)IE等老舊的瀏覽器。

此外,與XPath相比,CSS選擇器提供了更好的可讀性。我們甚至可以說,XPath是最慢的Web定位器,當(dāng)您從一個(gè)瀏覽器移至另一個(gè)瀏覽器時(shí),很可能會遇到XPath的一致性問題。因此,僅當(dāng)您無法在Selenium WebDriver中選用其他可靠的Web定位器時(shí),才建議使用XPath來定位Web元素。

小結(jié)一下,上述Web定位器按照執(zhí)行速度從快到慢依次是:ID、NAME、CSS選擇器、以及XPath。

使用更少的Web定位器

既然您已經(jīng)確定了最適合加速Selenium測試的Web定位器,下一步就應(yīng)該將定位器的數(shù)量保持在最低限度了。

如前所述,我們每次需要使用find_element(By)或find_elements(By)方法,來定位所需的Web元素,以執(zhí)行對DOM樹的訪問。那么對DOM樹的訪問次數(shù)越多,Selenium腳本的執(zhí)行時(shí)間就會越長。因此,如果您以Selenium腳本的最佳執(zhí)行速度為目標(biāo)的話,有必要使用更少的Web定位器。這樣,我們不但能夠提高測試腳本的可讀性,還可以最大限度地減少維護(hù)腳本所需的時(shí)間。

盡量避免Thread.sleep()

現(xiàn)代網(wǎng)站與Web應(yīng)用往往會?使用AJAX(異步的JavaScript和XML)在網(wǎng)頁上動態(tài)加載內(nèi)容。因此,頁面上的WebElement可能會以不同的時(shí)間間隔被加載,這將對尚未處于DOM中的元素造成執(zhí)行上的困難。

在此,我建議您通過監(jiān)控document.readyState的狀態(tài),來檢查DOM狀態(tài)。document.readyState的完成標(biāo)志著頁面上的所有資源都已加載完畢,因此我們可以開始對頁面上存在的WebElement進(jìn)行相關(guān)操作。

由于測試代碼中的幾秒鐘等待,都會增加頁面上資源加載所需的延遲,因此我們需要盡量避免使用Thread.sleep(sleep_in_miliseconds)。Selenium中的Thread.sleep()方法將會讓代碼的執(zhí)行暫停指定的時(shí)間間隔。

/* Pauses test execution for specified time in milliseconds */
Thread.sleep(5000);

如上述代碼段所示,我們添加了5秒的等待時(shí)間。如果頁面元素在指定的持續(xù)時(shí)間之內(nèi)(例如2秒鐘)就已完成了加載,那么剩下3秒的等待就不必要地增加了測試的執(zhí)行時(shí)間。由于頁面的加載時(shí)間往往取決于諸如:服務(wù)器負(fù)載、頁面設(shè)計(jì)、緩存、以及網(wǎng)絡(luò)帶寬等各種外部參數(shù),因此我們無法預(yù)測頁面的加載時(shí)間??梢?,無論網(wǎng)頁的狀態(tài)如何,Thread.sleep()方法都會執(zhí)行固定時(shí)間的休眠,因此為了加速Selenium測試,我們需要避免使用它。

重用現(xiàn)有的瀏覽器實(shí)例

目前,能夠與Selenium一起使用的所有自動化測試框架,都可以通過提供注釋,來加快測試的開發(fā)和執(zhí)行。同時(shí),注釋還有助于執(zhí)行具有不同輸入值的測試。當(dāng)然,只有根據(jù)測試的要求,使用正確的注釋集,才能加快Selenium測試。

以下是被各個(gè)主流自動化測試框架所廣泛使用的注釋列表:

自動化測試框架

注釋

JUnit [Selenium Java]

@BeforeClass, @Before, @Test, @After, @AfterClass, @Ignore

TestNG [Selenium Java]

@BeforeSuite, @BeforeTest, @BeforeClass, @BeforeMethod, @Test, @AfterMethod, @AfterClass, @AfterTest, etc.

NUnit [Selenium C#]

[SetUp], [TearDown], [Test], [TestCase], [OneTimeSetUp], [OneTimeTearDown], [Ignore], [Category], etc.

XUnit [Selenium C#]

[Theory], [InlineData], [Fact], etc.

有時(shí)候,您可能需要在相同的瀏覽器和操作系統(tǒng)類型的組合中,反復(fù)運(yùn)行某個(gè)或某組測試。此時(shí),如果您在每個(gè)測試的開始時(shí),都創(chuàng)建一個(gè)新的Selenium WebDriver實(shí)例,顯然會增加測試執(zhí)行的額外開銷。

Selenium的JUnit

下面是Selenium的JUnit中注解的執(zhí)行順序:

在使用JUnit框架的Selenium自動化測試中,Selenium WebDriver實(shí)例是在@Before注釋下實(shí)現(xiàn)的SetUp方法中創(chuàng)建的。已創(chuàng)建的實(shí)例是在@After注解下實(shí)現(xiàn)的TearDown方法中被銷毀的。

Selenium的TestNG

下面是Selenium的TestNG中注解的執(zhí)行順序:

同理,對于Selenium中的TestNG測試,SetUp方法是在@BeforeMethod注解下實(shí)現(xiàn)的,而TearDown方法是在@AfterMethod注解下實(shí)現(xiàn)的。

在瀏覽器和操作系統(tǒng)的組合上運(yùn)行一系列測試

下面,我們來討論不同的框架在同一個(gè)瀏覽器和操作系統(tǒng)組合上執(zhí)行三個(gè)測試的情況:

JUnit 框架

測試 - 1 @Before 注解下的 setUp() -> Test-1 -> @After 注解下的 tearDown()

測試 - 2 @Before 注解下的 setUp() -> Test-2 -> @After 注解下的 tearDown()

測試 - 3 @Before 注解下的 setUp() -> Test-3 -> @After 注解下的 tearDown()

TestNG 框架

測試 - 1 @BeforeMethod 注解下的 setUp() -> Test-1 -> @AfterMethod 注解下的 tearDown()

測試 - 2 @BeforeMethod 注解下的 setUp() -> Test-2 -> @AfterMethod 注解下的 tearDown()

測試 - 3 @BeforeMethod 注解下的 setUp() -> Test-3 -> @AfterMethod 注解下的 tearDown()

如上表所示,在每個(gè)測試場景都會在注釋之后創(chuàng)建和銷毀瀏覽器實(shí)例。

在JUnit和TestNG框架中重用瀏覽器實(shí)例

相反,我們可以使用適當(dāng)?shù)淖⑨屧谀_本之間共享相同的瀏覽器實(shí)例:

JUnit 框架

測試 - 1、測試 - 2 和測試 -3 @BeforeClass 注解下的 setUp() -> Test-1、Test-2 和 Test-3 -> @AfterClass 注解下的 tearDown()

TestNG 框架

測試 - 1、測試 - 2 和測試 -3 @BeforeTest(或@BeforeClass)注解下的setUp() -> Test-1、Test-2和Test-3 -> @AfterTest(或@AfterClass)注解下的tearDown()

在這種情況下,所有測試場景都會使用同一個(gè)瀏覽器實(shí)例,并且一旦所有測試執(zhí)行完成后,該實(shí)例就會被銷毀。當(dāng)然,如果測試必須在不同的瀏覽器和操作系統(tǒng)組合上運(yùn)行時(shí),則不能使用相同的技術(shù),而必須在每個(gè)測試場景之后創(chuàng)建和銷毀測試組合。

使用Selenium進(jìn)行自動化測試的顯式等待

Selenium中的隱式等待被應(yīng)用于測試腳本中的所有Web元素。而隱式等待的主要缺點(diǎn)在于您無法在元素可見、可點(diǎn)擊、可選擇等條件下執(zhí)行等待。與此同時(shí),Selenium中的顯式等待則允許您對頁面上存在的WebElement執(zhí)行有條件的等待。例如,如果某個(gè)被指定的WebElement在顯式等待所規(guī)定的持續(xù)時(shí)間內(nèi)可見,那么就會觸發(fā)ElementNotVisibleException。如果已定位的元素是可點(diǎn)擊的,那么elementToBeClickable方法將返回一個(gè)WebElement。

WebDriverWait和ExpectedConditions類的組合可被用于在WebElements上執(zhí)行顯式等待。顯式等待的好處在于它是在代碼層面,而非遠(yuǎn)程Selenium部分上運(yùn)行的。顯式等待無需等到設(shè)定時(shí)間的結(jié)束,而是在滿足指定條件時(shí),便可立即退出等待。如果設(shè)定的條件一旦找到了WebElement,就會將該元素作為結(jié)果予以返回。如果WebElement在DOM中并不存在,即使條件中指定時(shí)間已過,它也會觸發(fā)TimeoutException。

在下面的代碼段中,我們對visibilityOfElementLocated條件執(zhí)行了5秒鐘的顯式等待。如果ID = 'element'的WebElement在5秒內(nèi)被找到,那么該顯式等待就會退出,并返回所需的WebElement。

Java
/* Trigger an explicit wait of 5 Seconds */
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("element"))

由于只要找到元素就可以訪問WebElement,因此實(shí)際的等待時(shí)間可能會少于設(shè)定的等待時(shí)間,那么顯式等待的測試腳本的性能會更好,也會使得Selenium測試運(yùn)行得更快。

創(chuàng)建原子性和自主式測試腳本

無論測試場景有多么復(fù)雜,我們都需要將復(fù)雜的場景分解成為多個(gè)“獨(dú)立和原子性”的測試用例。

像TestNG之類的自動化測試框架能夠支持通過諸如dependsOnMethods(用于各種方法)和dependsOnGroups(用于各個(gè)組)等注釋,來聲明測試方法之間的顯式依賴關(guān)系。但是,只有當(dāng)您希望在測試方法之間共享數(shù)據(jù)和狀態(tài)時(shí),才應(yīng)該在Selenium測試腳本中使用測試依賴項(xiàng)。

同時(shí),由于原子性測試可被用于故障檢測,因此我們需要通過保持測試的簡短和原子態(tài),來減少維護(hù)測試的工作量??梢哉f,有了原子性的保證,我們不但可以最大限度地減少測試的依賴性,而且有助于隔離測試中出現(xiàn)的問題,并加快Selenium測試的整體效率。

在Selenium自動化中利用并行測試

Selenium中的并行測試可以讓您在不同的測試環(huán)境中,同時(shí)運(yùn)行相同的測試。如果您計(jì)劃使用內(nèi)部Selenium Grid進(jìn)行分布式測試,那么您可以利用Selenium Grid 4所提供的功能,來加速測試場景的執(zhí)行。

根據(jù)所測場景的不同,您可以選擇“類”級別或“方法”級別中的任何一種開展并行化測試。而此類測試主要可以對如下三個(gè)方面予以增強(qiáng):

  • 對測試場景分組
  • 測試場景的參數(shù)化
  • 選擇基于云的Selenium Grid

對測試場景分組

隨著更多的測試文件和測試方法被添加,測試套件的復(fù)雜性會成倍增加。為了最大限度地減少測試套件在實(shí)現(xiàn)和維護(hù)上的復(fù)雜性,我們需要根據(jù)被測的功能,對測試進(jìn)行分組。

正如下面對TestNG測試用例進(jìn)行分組所展示那樣,我們創(chuàng)建了兩個(gè)測試組(即Search和ToDo),并在“方法”級別并行執(zhí)行。TestNG中的線程計(jì)數(shù)屬性允許您通過指定在測試執(zhí)行期間要創(chuàng)建的最大線程數(shù),來并行開展測試。

可見,分組測試場景降低了維護(hù)測試套件的復(fù)雜性,同時(shí)也加快了執(zhí)行時(shí)間。當(dāng)然,這些都取決于為實(shí)現(xiàn)并行化而選擇的方法。

使用Selenium 4(而不是Selenium 3)

Selenium 4是Selenium自動化框架中最受期待的版本之一。目前,Selenium 4的最新版本為??4.0.0-beta-1??。它在如下方面進(jìn)行了顯著的改進(jìn)和增強(qiáng):

  • 改進(jìn)和優(yōu)化了Selenium Grid
  • 對Selenium WebDriver予以了W3C標(biāo)準(zhǔn)化
  • 增強(qiáng)了Selenium 4的IDE
  • 引入了Chrome DevTools
  • 引入了相對定位器(Relative Locators)

總地說來,Selenium 4中的增強(qiáng)功能可以在加速Selenium測試方面發(fā)揮重要的作用。

過去,Selenium 3使用JSON有線協(xié)議,在Web瀏覽器和測試代碼之間進(jìn)行通信。這會導(dǎo)致使用W3C協(xié)議對API請求進(jìn)行編、解碼而產(chǎn)生額外的開銷。而Selenium 4直接使用WebDriver W3C協(xié)議,從而加快了與Web瀏覽器的通信。這種架構(gòu)更改不但加快了Selenium測試,而且提高了測試的穩(wěn)定性。

下圖展示的是在Selenium 4中新引入的相對定位器。當(dāng)它在訪問臨近的特定WebElement時(shí),非常實(shí)用。

與頁面上的每個(gè)WebElement使用find_element()和find_elements()方法不同,相對定位器通過與TagName(在Selenium 4的Java中)結(jié)合使用,可以讓您以更快的速度訪問到相對WebElement。因此,在您必須訪問相對于DOM元素的WebElement場景時(shí),相對定位器可以加速Selenium測試。

值得一提的是,從Selenium 3升級到Selenium 4是無縫的,您應(yīng)當(dāng)檢查版本,以確認(rèn)是否真的能夠利用Selenium 4所提供的特性和功能,來加速Selenium測試。

使用基于云的Selenium Grid進(jìn)行自動化測試

當(dāng)涉及到網(wǎng)格的可擴(kuò)展性和可靠性時(shí),在本地Selenium Grid上并行運(yùn)行測試,存在著一個(gè)嚴(yán)重的缺陷:它并不適用于在大量瀏覽器、操作系統(tǒng)和設(shè)備的組合上,并行地執(zhí)行針對大型Web應(yīng)用的多個(gè)測試套件。

所謂云端的Selenium測試,是指在可靠且可擴(kuò)展的、基于云服務(wù)的Selenium Grid上并行開展測試,因此它有助于加快Selenium測試。由下面顯示的testng.xml文件示例可知,該并行是在“測試”級別上實(shí)現(xiàn)的。即:每個(gè)標(biāo)記都在單獨(dú)的線程中運(yùn)行。

從下面的執(zhí)行快照中可以看出,這兩個(gè)測試都是在基于云端的Selenium Grid上并行運(yùn)行的。

使用由基于云端的Selenium Grid所提供的功能,您可以并行運(yùn)行“N”個(gè)測試(此處的“N”取決于您計(jì)劃支持的“最大并發(fā)會話數(shù)”),進(jìn)而加快Selenium測試。

通過禁用網(wǎng)頁上的圖像來實(shí)現(xiàn)更快的頁面加載

一旦創(chuàng)建了Selenium WebDriver實(shí)例,Selenium中的driver.get()方法將被用于打開被測頁面。網(wǎng)頁的加載速度往往取決于頁面的組成。如果頁面上有大量的圖像的話,那么頁面的加載時(shí)間就會增加。

因此,通過使用特定于瀏覽器的設(shè)置,您可以按需禁用在相應(yīng)的Web瀏覽器中加載圖像,以加快網(wǎng)頁的加載速度。

運(yùn)行Selenium腳本時(shí),禁用Chrome中的圖像加載

如下代碼段展示了如何實(shí)現(xiàn)在Chrome中禁用圖像的加載,以加快Selenium測試:

Java
package com.disableimages;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;
import java.util.HashMap;

public class test_disable_image_demo
{
String test_url = "https://www.amazon.com";
WebDriver driver = null;

@Test(enabled=true, priority = 1)
public void test_disable_images_chrome() throws InterruptedException
{
ChromeOptions options =new ChromeOptions();
HashMap prefs = new HashMap();
prefs.put("profile.managed_default_content_settings.images", 2);

options.setExperimentalOption("prefs", prefs);
driver = new ChromeDriver(options);

driver.get(test_url);
driver.manage().window().maximize();

Thread.sleep(5000);
}

@AfterTest
public void tearDown()
{
if (driver != null)
{
driver.quit();
}
}
}

在上述代碼實(shí)現(xiàn)中,我們通過將Firefox的首選項(xiàng)--permissions.default.image設(shè)置為2,以禁用從Amazon處加載圖像。該方法對于需要加載大量圖像的測試頁面的情況,非常有效。

使用數(shù)據(jù)驅(qū)動測試進(jìn)行參數(shù)化

在某些情況下,您需要跨多個(gè)瀏覽器和操作系統(tǒng)的組合,或針對不同輸入的組合,運(yùn)行特定的場景測試。眾所周知,對測試方法中的值進(jìn)行硬編碼,并不是一個(gè)好的習(xí)慣。您應(yīng)該使用參數(shù)化,來針對大量的數(shù)據(jù)集運(yùn)行測試。目前,所有主流的自動化框架,包括:用于Selenium C#的MSTest、NUnit等,用于Selenium Java的JUnit、TestNG等,以及用于Selenium Python的PyTest等,都支持參數(shù)化測試。

針對那些必須在多個(gè)測試組合(或測試輸入)中運(yùn)行相同測試的需求,您可以通過諸如TestNG之類的自動化測試框架,讓testng.xml來傳遞參數(shù),進(jìn)而在“測試”級別實(shí)現(xiàn)并行的參數(shù)化測試,以顯著地加快Selenium測試,并提高測試的覆蓋率。

按需使用無頭(Headless)瀏覽器和驅(qū)動程序

運(yùn)行Selenium自動化測試的一個(gè)目的是,檢查并驗(yàn)證底層UI元素的交互。對此,您需要通過在非無頭(non-headless)模式下調(diào)用瀏覽器驅(qū)動程序,來驗(yàn)證交互。

同時(shí),無頭瀏覽器允許您在沒有瀏覽器或任何其他GUI下,運(yùn)行瀏覽器UI測試。目前,Chrome、Firefox等流行的瀏覽器都可以在無頭模式下運(yùn)行。由于跨瀏覽器測試是在后端運(yùn)行的,因此無頭測試提高了跨瀏覽器測試的整體性能。請參考如下代碼段:

Java
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("build", "your build name");
capabilities.setCapability("name", "your test name");
capabilities.setCapability("platform", "Windows 10");
capabilities.setCapability("browserName", "Chrome");
capabilities.setCapability("version","89.0");
capabilities.setCapability("headless",true);

當(dāng)您不打算檢查通過測試腳本、以及相應(yīng)的瀏覽器驅(qū)動程序去實(shí)現(xiàn)的UI交互時(shí),就可以使用無頭瀏覽器測試。可以說,沒有瀏覽器UI和無頭瀏覽器的各種UI,都可以起到加速Selenium測試的效果。

目前,此類主流無頭瀏覽器(或驅(qū)動程序)包括:HtmlUnit、Splash、PhantomJS、TrifleJS、ZombieJS、以及SimpleBrowser。其中,基于HtmlUnit的HtmlUnitDriver是Selenium WebDriver無頭瀏覽器的輕量級實(shí)現(xiàn)。HtmlUnitDriver是與Chrome和Firefox類似的瀏覽器驅(qū)動程序,不過它并不提供GUI。因此,您可以靈活地在主流瀏覽器的無頭版本、以及HtmlUnitDriver上,執(zhí)行跨瀏覽器測試。

用Java編寫的HtmlUnit瀏覽器能夠支持AJAX和JavaScript的處理。同時(shí),它也提供了部分渲染的功能。下面展示的是用于創(chuàng)建HtmlUnitDriver實(shí)例,并使用它在Selenium中執(zhí)行瀏覽器測試的代碼片段:

JavaScript
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

/* Create a new instance of the HtmlUnitDriver */
WebDriver driver = new HtmlUnitDriver();

/* Perform necessary actions as per the desired test requirement */
................
................

/* Release the resources held by HtmlUnitDriver */
driver.quit();

而PhantomJS是另一種流行的、基于JavaScript API的無頭瀏覽器選擇項(xiàng)。它使用QtWebKit作為后端,并為流行的Web標(biāo)準(zhǔn)提供了諸如JSON、Canvas、SVG、以及DOM等原生的處理支持。PhantomJS 2.1是其最新的穩(wěn)定版本,其中集成了GhostDriver。不過, PhantomJS項(xiàng)目(https://github.com/ariya/phantomjs)目前處于暫停狀態(tài)。

PhantomJS不但可以被用于Windows、Linux和macOS X等流行平臺,而且能夠被廣泛地用于諸如:無頭Web測試、頁面自動化、屏幕截圖、以及網(wǎng)絡(luò)監(jiān)控等用例中。

下面顯示的是創(chuàng)建PhantomJS驅(qū)動程序?qū)嵗?,并使用它在Selenium中執(zhí)行瀏覽器測試的代碼片段:

JavaScript
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

/* Create a new instance of the PhantomJS Driver*/
WebDriver driver = new PhantomJSDriver();
/* Perform necessary actions as per the desired test requirement */
................
................

/* Release the resources held by PhantomJS Driver */
driver.quit();

根據(jù)測試要求,我們在上述代碼中使用了無頭瀏覽器測試,來加速Selenium測試。當(dāng)然,除了HtmlUnitDriver和PhantomJSDriver之外,Chrome和Firefox等無頭版本的瀏覽器,也可被用于在Selenium測試中加速,并獲取更高的準(zhǔn)確性。

小結(jié)

在編寫Selenium測試時(shí),影響性能的主要因素之一便是測試的運(yùn)行速度。其中,基于云端的Selenium Grid和Selenium并行測試是加速該過程的兩種主要方法。同時(shí),我們也介紹了如何通過采用不同的語言和自動化測試框架,來加速Selenium測試,提高測試性能與覆蓋率、以及交付出更好的產(chǎn)品質(zhì)量。

譯者介紹

陳峻 (Julian Chen),社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗(yàn);持續(xù)以博文、專題和譯文等形式,分享前沿技術(shù)與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓(xùn)與授課。

原文標(biāo)題:??How To Speed Up Selenium Test Cases Execution???,作者:Himanshu Sheth?


新聞名稱:如何加速Selenium測試用例的執(zhí)行
分享地址:http://uogjgqi.cn/article/dhdehcd.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流