การทดสอบข้ามเบราว์เซอร์โดยใช้ Selenium ไดรเวอร์เว็บ

⚡ สรุปอย่างชาญฉลาด

การทดสอบข้ามเบราว์เซอร์โดยใช้ Selenium WebDriver ตรวจสอบว่าเว็บแอปพลิเคชันทำงานได้อย่างสม่ำเสมอใน Chrome FirefoxSafari และ Edge บทช่วยสอนนี้แสดงวิธีรวมเบราว์เซอร์เหล่านี้เข้าด้วยกัน Selenium เว็บไดร์เวอร์ด้วย TestNG เพื่อเริ่มเซสชันคู่ขนาน ตรวจสอบความถูกต้องของการแสดงผล และขยายขอบเขตการครอบคลุมไปยังเบราว์เซอร์บนเดสก์ท็อปและมือถือรุ่นใหม่

  • 🌐 ทำไมมันเรื่อง: ผู้ใช้งานจริงเปิดหน้าเว็บเดียวกันในเบราว์เซอร์ที่แตกต่างกัน ดังนั้นเค้าโครง สคริปต์ และสไตล์จึงต้องใช้งานได้ดีในทุกเบราว์เซอร์ เพื่อปกป้องอัตราการแปลงและการเข้าถึงได้ง่าย
  • 🧪 Selenium การตั้งค่า WebDriver: กำหนดค่า ChromeDriver, GeckoDriver, EdgeDriver และ SafariDriver จากนั้นเลือกอินสแตนซ์ที่เหมาะสมผ่านวิธีการกำหนดพารามิเตอร์เพียงวิธีเดียว
  • 📱 TestNG การทดลองแบบขนาน: ไฟล์ testing.xml ที่มี parallel=”tests” จะเรียกใช้งาน Chrome Firefoxและชุดทดสอบ Edge ในเวลาเดียวกัน ช่วยลดรอบการรับฟังความคิดเห็นสำหรับชุดทดสอบการถดถอยขนาดใหญ่
  • ✅ ข้อบกพร่องที่พบได้ทั่วไป: การปรับขนาดตัวอักษร, การปรับเปลี่ยนเลย์เอาต์ CSS, Javaช่องว่างของสคริปต์โพลีฟิลล์ การรองรับ HTML5 การวางแนวภาพ และความไม่เข้ากันระหว่างระบบปฏิบัติการและเบราว์เซอร์ จะปรากฏให้เห็นอย่างรวดเร็ว
  • 🛠️ ห้องปฏิบัติการบนคลาวด์และปัญญาประดิษฐ์: Sauce Labs, BrowserStack และ LambdaTest ขยายขอบเขตการครอบคลุมไปยังระบบปฏิบัติการและเบราว์เซอร์หลายพันคู่ และการวิเคราะห์การถดถอยทางภาพที่ขับเคลื่อนด้วย AI และตัวระบุตำแหน่งที่แก้ไขตัวเองได้ช่วยเพิ่มความน่าเชื่อถือ

การทดสอบข้ามเบราว์เซอร์ใน Selenium ไดรเวอร์เว็บ

เหตุใดเราจึงต้องทดสอบข้ามเบราว์เซอร์?

แอปพลิเคชันบนเว็บแตกต่างจากแอปพลิเคชันบนเดสก์ท็อปอย่างมาก แอปพลิเคชันบนเว็บสามารถเปิดได้ในเบราว์เซอร์ใดก็ได้โดยผู้ใช้ปลายทาง ตัวอย่างเช่น บางคนอาจชอบเปิดแอปพลิเคชันบนเว็บผ่านเบราว์เซอร์อื่น https://twitter.com in Firefoxในขณะที่คนอื่นใช้ Chrome, Safariหรือ Microsoft Edge.

จากแผนภาพด้านล่าง คุณจะสังเกตได้ว่าในเบราว์เซอร์รุ่นเก่า กล่องล็อกอินของ Twitter ไม่แสดงมุมโค้งมนอย่างถูกต้อง ในขณะที่ Chrome รุ่นใหม่แสดงมุมโค้งมนได้ตามที่ออกแบบไว้

การทดสอบข้ามเบราว์เซอร์

ดังนั้น เราจึงต้องตรวจสอบให้แน่ใจว่าเว็บแอปพลิเคชันจะทำงานได้ตามที่คาดหวังในทุกเบราว์เซอร์ยอดนิยม เพื่อให้ผู้คนจำนวนมากขึ้นสามารถเข้าถึงและใช้งานได้

เป้าหมายนี้สามารถบรรลุได้ด้วยการใช้งานข้ามเบราว์เซอร์ การทดสอบ ของผลิตภัณฑ์บนทุกเบราว์เซอร์ที่อยู่ในขอบเขตการใช้งาน

สาเหตุของปัญหาการใช้งานข้ามเบราว์เซอร์

  1. ขนาดตัวอักษรไม่ตรงกันในเบราว์เซอร์ที่แตกต่างกัน
  2. Javaการใช้งานกลไกสคริปต์แตกต่างกันไปในแต่ละเวอร์ชันของ Chrome (V8) Firefox (สไปเดอร์มังกี้), ซาฟารี (JavaScriptCore) และ Edge
  3. ความแตกต่างระหว่างการตรวจสอบความถูกต้องของ CSS และ HTML รวมถึงการจัดการคำนำหน้าของผู้ผลิต (vendor prefix)
  4. การรองรับคุณสมบัติ HTML5 และ ECMAScript ในเบราว์เซอร์เวอร์ชันเก่าอาจไม่สม่ำเสมอหรือไม่สมบูรณ์
  5. การจัดตำแหน่งหน้า การกำหนดขนาด div และรูปแบบการแสดงผลแบบ flexbox หรือ grid
  6. ความแตกต่างของการวางแนวภาพและโปรไฟล์สี
  7. ความไม่เข้ากันของเบราว์เซอร์กับระบบปฏิบัติการพื้นฐาน รวมถึงปัญหาแปลกๆ ของ WebView บนมือถือ Android และ iOS

วิธีทำการทดสอบข้ามเบราว์เซอร์

ถ้าเราใช้ Selenium WebDriver ช่วยให้เราสามารถสร้างระบบอัตโนมัติในการทดสอบกับ Chrome ได้ Firefox, Microsoft Edgeและเบราว์เซอร์ Safari

เพื่อให้สามารถเรียกใช้กรณีทดสอบด้วยเบราว์เซอร์ต่างๆ บนเครื่องเดียวกันในเวลาเดียวกันได้ เราสามารถผสานรวม... TestNG กรอบด้วย Selenium WebDriver. สำหรับการครอบคลุมระบบปฏิบัติการและเวอร์ชันที่กว้างขึ้น ชุดเครื่องมือเดียวกันนี้สามารถชี้ไปยังระบบคลาวด์ เช่น Sauce Labs, BrowserStack หรือ LambdaTest ผ่านทาง WebDriver endpoint ระยะไกลได้

ไฟล์ testing.xml ของคุณจะมีลักษณะดังนี้:

การทดสอบข้ามเบราว์เซอร์

Testing.xml นี้จะแมปกับไฟล์ กรณีทดสอบ ซึ่งมีลักษณะดังนี้:

การทดสอบข้ามเบราว์เซอร์

เนื่องจากไฟล์ testing.xml มีแท็ก Test หลายแท็ก ('ChromeTest', 'Firefoxหากใช้ชื่อ 'Test' หรือ 'EdgeTest' กรณีทดสอบนี้จะดำเนินการหนึ่งครั้งสำหรับแต่ละเบราว์เซอร์

การทดสอบแรก 'ChromeTest' จะส่งค่าพารามิเตอร์ 'browser' เป็น 'chrome' ดังนั้น ChromeDriver จะถูกเรียกใช้งาน กรณีทดสอบนี้จะทำงานบนเบราว์เซอร์ Chrome

การทดสอบครั้งที่สอง 'FirefoxTest' จะผ่านค่าของพารามิเตอร์ 'browser' เป็น 'Firefox', ดังนั้น Firefoxไดรเวอร์จะถูกเรียกใช้งาน กรณีทดสอบนี้จะทำงานบน Firefox เบราว์เซอร์ การเพิ่มการทดสอบ Edge หรือ Safari ก็ใช้รูปแบบเดียวกัน

Guru99CrossBrowserScript.java

สมบูรณ์ Code:

package parallelTest;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class CrossBrowserScript {

	WebDriver driver;

	/**
	 * This function will execute before each Test tag in testng.xml
	 * @param browser
	 * @throws Exception
	 */
	@BeforeTest
	@Parameters("browser")
	public void setup(String browser) throws Exception{
		//Check if parameter passed from TestNG is 'firefox'
		if(browser.equalsIgnoreCase("firefox")){
		//create firefox instance
			System.setProperty("webdriver.gecko.driver", ".\\geckodriver.exe");
			driver = new FirefoxDriver();
		}
		//Check if parameter passed as 'chrome'
		else if(browser.equalsIgnoreCase("chrome")){
			//set path to chromedriver.exe
			System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe");
			//create chrome instance
			driver = new ChromeDriver();
		}
		//Check if parameter passed as 'Edge'
		else if(browser.equalsIgnoreCase("Edge")){
			//set path to msedgedriver.exe
			System.setProperty("webdriver.edge.driver",".\\msedgedriver.exe");
			//create Edge instance
			driver = new EdgeDriver();
		}
		//Check if parameter passed as 'Safari'
		else if(browser.equalsIgnoreCase("Safari")){
			//SafariDriver ships with macOS, no driver path needed
			driver = new SafariDriver();
		}
		else{
			//If no browser passed throw exception
			throw new Exception("Browser is not correct");
		}
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	}

	@Test
	public void testParameterWithXML() throws InterruptedException{
		driver.get("https://demo.guru99.com/V4/");
		//Find user name
		WebElement userName = driver.findElement(By.name("uid"));
		//Fill user name
		userName.sendKeys("guru99");
		//Find password
		WebElement password = driver.findElement(By.name("password"));
		//Fill password
		password.sendKeys("guru99");
	}
}

การทดสอบ.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="TestSuite" thread-count="3" parallel="tests" >

<test name="ChromeTest">

<parameter name="browser" value="Chrome" />

<classes>

<class name="parallelTest.CrossBrowserScript">

</class>

</classes>

</test>

<test name="FirefoxTest">

<parameter name="browser" value="Firefox" />

<classes>

<class name="parallelTest.CrossBrowserScript">

</class>

</classes>

</test>

<test name="EdgeTest">

<parameter name="browser" value="Edge" />

<classes>

<class name="parallelTest.CrossBrowserScript">

</class>

</classes>

</test>

</suite>

หมายเหตุ: หากต้องการเรียกใช้การทดสอบ ให้คลิกขวาที่ การทดสอบ.xmlเลือก Run As แล้วคลิก TestNG ห้องสวีท

 การทดสอบข้ามเบราว์เซอร์

การปรับขนาดด้วย Cloud Browser Grids

เล่น Selenium WebDriver รองรับเบราว์เซอร์เพียงสองหรือสามตัวในเครื่อง แต่ผู้ใช้จริงเข้าถึงเว็บไซต์จากระบบปฏิบัติการและเบราว์เซอร์หลายร้อยแบบ ห้องปฏิบัติการบนคลาวด์ เช่น ซอสแล็บ, BrowserStackและ การทดสอบแลมบ์ดา เปิดเผยเอนด์พอยต์ WebDriver ระยะไกล ชี้ไปยังที่เดียวกัน Selenium การทดสอบบนระบบกริดจะผ่านเกณฑ์ความสามารถที่ต้องการสำหรับเบราว์เซอร์ เวอร์ชัน ระบบปฏิบัติการ และความละเอียด และชุดทดสอบจะปรับขนาดในแนวนอนโดยไม่ต้องจัดการไดรเวอร์ในเครื่อง

นอกจากนี้ ตารางข้อมูลสมัยใหม่ยังนำเสนอคุณสมบัติที่ใช้ AI ช่วยเหลือ เช่น การเปรียบเทียบความแตกต่างแบบภาพ การระบุตำแหน่งองค์ประกอบที่แก้ไขตัวเองได้ และการให้คะแนนความไม่เสถียร ซึ่งช่วยลดภาระการบำรุงรักษาสำหรับชุดทดสอบข้ามเบราว์เซอร์ที่มีอายุการใช้งานยาวนาน

หมายเหตุ โปรแกรมดังกล่าวได้รับการสร้างและทดสอบบน Selenium 4. โครม Firefoxและ Microsoft Edgeหากโปรแกรมแสดงข้อผิดพลาด โปรดอัปเดตไฟล์ไบนารีของไดรเวอร์ให้ตรงกับเวอร์ชันเบราว์เซอร์ที่ติดตั้งไว้ หรือใช้... Selenium ตัวจัดการที่แก้ไขปัญหาไดรเวอร์โดยอัตโนมัติ

ดาวน์โหลด Selenium ไฟล์โครงการสำหรับการสาธิตในบทช่วยสอนนี้

คำถามที่พบบ่อย

การทดสอบข้ามเบราว์เซอร์ (Cross Browser Testing) เป็นเทคนิคการทดสอบทั้งด้านการทำงานและด้านการแสดงผล ที่ตรวจสอบว่าเว็บแอปพลิเคชันทำงานได้เหมือนกันบนเบราว์เซอร์ Chrome หรือไม่ Firefox,ซาฟารี,และ Microsoft Edge ครอบคลุมทั้งบนเดสก์ท็อปและมือถือ รวมถึงระบบปฏิบัติการและขนาดหน้าจอที่แตกต่างกัน

Selenium WebDriver มี API ตัวเดียวที่ใช้ควบคุมการทำงานของ Chrome FirefoxEdge และ Safari ผ่านโปรโตคอล W3C WebDriver อย่างเป็นทางการ โค้ดทดสอบเดียวกันนี้สามารถทำงานได้กับทุกเบราว์เซอร์ ซึ่งทำให้ Selenium WebDriver คือมาตรฐานที่ใช้กันอย่างแพร่หลายสำหรับการทำงานอัตโนมัติของเบราว์เซอร์และการทดสอบข้ามเบราว์เซอร์

TestNG ใช้ไฟล์ testing.xml โดยกำหนดค่า parallel=”tests” และ thread-count เพื่อเรียกใช้แท็ก Test แต่ละแท็กในเธรดของตัวเอง เมื่อรวมกับการตั้งค่า @BeforeTest แบบมีพารามิเตอร์แล้ว ก็จะได้ผลลัพธ์เช่นเดียวกัน Selenium ชุดโปรแกรม WebDriver ทำงานบนเบราว์เซอร์ Chrome Firefoxและ Edge พร้อมกัน ช่วยลดเวลาในการประมวลผลโดยรวม

Sauce Labs, BrowserStack และ LambdaTest ให้บริการโฮสติ้ง Selenium ตารางที่แสดงการผสมผสานระบบปฏิบัติการและเบราว์เซอร์นับพันแบบ รวมถึง iOS Safari และ Android Chrome. ชี้ RemoteWebDriver ไปที่เอนด์พอยต์ของตาราง และส่งค่าความสามารถที่ต้องการเพื่อเรียกใช้โค้ดเดียวกันในระดับที่ใหญ่ขึ้น

เครื่องมือวิเคราะห์ภาพที่ใช้ AI เช่นที่ติดตั้งอยู่ใน Applitools, Percy และโมดูลภาพของ BrowserStack และ LambdaTest จะเปรียบเทียบภาพหน้าจอในเชิงความหมายแทนที่จะเปรียบเทียบทีละพิกเซล โดยจะไม่สนใจความแตกต่างของการปรับรอยหยักหรือการแสดงผลฟอนต์ที่คาดหวังระหว่าง Chrome กับเบราว์เซอร์อื่นๆ Firefoxรวมถึง Safari และ Edge ในขณะเดียวกันก็ยังสามารถตรวจจับข้อผิดพลาดด้านการจัดวางที่แท้จริง ซึ่งช่วยลดผลลัพธ์ที่ผิดพลาดในกระบวนการทดสอบข้ามเบราว์เซอร์ได้อย่างมาก

ใช่แล้ว เฟรมเวิร์กสมัยใหม่ เช่น Healenium TestimMabl และคุณสมบัติ AI ใน Selenium IDE จะวิเคราะห์ DOM และเสนอตัวเลือก XPath หรือ CSS ที่เสถียร เมื่อตัวระบุตำแหน่งใช้งานไม่ได้เนื่องจากการเปลี่ยนแปลง UI ตัวเลือกที่สร้างโดย AI จะแก้ไขตัวเองโดยการให้คะแนนองค์ประกอบใกล้เคียงและเลือกตัวเลือกที่ตรงกันที่สุด ซึ่งช่วยให้ชุดการทดสอบข้ามเบราว์เซอร์ผ่านเกณฑ์โดยไม่ต้องดูแลรักษาด้วยตนเองมากนัก

ข้อบกพร่องที่พบได้ทั่วไป ได้แก่ ความไม่ตรงกันของแบบอักษรและการแสดงผล CSS Javaความไม่สอดคล้องกันของเอนจินสคริปต์, การสนับสนุนคุณสมบัติ HTML5 หรือ ES ที่เสียหาย, ปัญหาการวางแนวภาพ, ปัญหาการจัดเรียงหน้าเว็บ, คำนำหน้าผู้ผลิตที่หายไป และความล้มเหลวเฉพาะระบบปฏิบัติการบน iOS Safari หรือ Android โครเมียม

สรุปโพสต์นี้ด้วย: