اختبار عبر المتصفح باستخدام Selenium ويب درايفر

⚡ ملخص ذكي

اختبار عبر المتصفح باستخدام Selenium يتحقق برنامج WebDriver من أن تطبيق الويب يعمل بشكل متسق على متصفح Chrome. Firefoxسفاري، وإيدج. يشرح هذا البرنامج التعليمي كيفية دمجها Selenium برنامج تشغيل الويب مع TestNG لإطلاق جلسات متوازية، والتحقق من صحة العرض، وتوسيع نطاق التغطية عبر متصفحات سطح المكتب والهواتف المحمولة الحديثة.

  • 🌐 لماذا يهم: يفتح المستخدمون الحقيقيون نفس الصفحة في متصفحات مختلفة، لذلك يجب أن تظل التخطيطات والبرامج النصية والأنماط ثابتة في كل مكان لحماية التحويلات وإمكانية الوصول.
  • 🧪 Selenium إعداد WebDriver: قم بتكوين ChromeDriver و GeckoDriver و EdgeDriver و SafariDriver، ثم اختر المثيل المناسب من خلال طريقة واحدة ذات معلمات.
  • 📱 TestNG التشغيل المتوازي: يؤدي ملف testing.xml الذي يحتوي على parallel="tests" إلى تشغيل متصفح Chrome، Firefox، ومجموعات Edge في نفس الوقت، مما يقلل من دورات التغذية الراجعة لحزم الانحدار الكبيرة.
  • العيوب الشائعة التي تم اكتشافها: تغيير حجم الخط، وتغييرات تخطيط CSS، Javaتظهر ثغرات ملء الفراغات في البرامج النصية، ودعم HTML5، واتجاه الصورة، وعدم التوافق بين نظام التشغيل والمتصفح بسرعة.
  • 🛠️ مختبرات الحوسبة السحابية والذكاء الاصطناعي: تعمل Sauce Labs و BrowserStack و LambdaTest على توسيع نطاق التغطية ليشمل آلاف أزواج أنظمة التشغيل والمتصفحات، كما أن الانحدار البصري المدعوم بالذكاء الاصطناعي ومحددات المواقع ذاتية الإصلاح تزيد من الموثوقية.

اختبار التوافق مع المتصفحات المختلفة Selenium ويب درايفر

لماذا نحتاج إلى اختبار عبر المتصفحات؟

تختلف تطبيقات الويب اختلافًا كبيرًا عن تطبيقات سطح المكتب الأصلية. يمكن للمستخدم النهائي فتح تطبيق الويب في أي متصفح. على سبيل المثال، يفضل بعض الأشخاص فتحه في متصفحات أخرى. https://twitter.com in Firefox، بينما يستخدم الآخرون الكروم, سفاري أو Microsoft Edge.

في الرسم البياني أدناه يمكنك ملاحظة أنه في المتصفحات القديمة، لا يعرض مربع تسجيل الدخول في تويتر الزوايا المستديرة بشكل صحيح، بينما يعرض متصفح كروم الحديث الزوايا كما هو مصمم.

عبر متصفح اختبار

لذا نحتاج إلى ضمان أن تطبيق الويب سيعمل كما هو متوقع في جميع المتصفحات الشائعة، حتى يتمكن المزيد من الأشخاص من الوصول إليه واستخدامه.

يمكن تحقيق هذا الهدف باستخدام متصفحات متعددة الاختبار المنتج على كل متصفح ضمن النطاق.

أسباب مشاكل التوافق بين المتصفحات

  1. عدم تطابق حجم الخط في المتصفحات المختلفة.
  2. Javaتختلف تطبيقات محرك البرمجة النصية عبر متصفح كروم (الإصدار 8). Firefox (سبايدر مونكي)، سفاري (JavaScriptCore)، و Edge.
  3. الاختلافات في التحقق من صحة CSS و HTML، بما في ذلك معالجة بادئة البائع.
  4. دعم غير متناسق أو جزئي لميزات HTML5 وECMAScript في إصدارات المتصفحات القديمة.
  5. محاذاة الصفحة، وحجم عناصر div، واختلافات عرض flexbox أو الشبكة.
  6. اختلافات اتجاه الصورة وملف تعريف الألوان.
  7. عدم توافق المتصفح مع نظام التشغيل الأساسي، بما في ذلك مشاكل WebView على الأجهزة المحمولة Android و iOS.

كيفية إجراء اختبار عبر المتصفح

إذا كنا نستخدم ملفات Selenium باستخدام WebDriver، يمكننا أتمتة حالات الاختبار على متصفح Chrome. Firefox, Microsoft Edgeومتصفحات سفاري.

لتنفيذ حالات الاختبار باستخدام متصفحات مختلفة على نفس الجهاز في نفس الوقت، يمكننا دمج TestNG الإطار مع Selenium WebDriver. لتغطية أوسع لأنظمة التشغيل والإصدارات، يمكن توجيه نفس المجموعة إلى شبكات سحابية مثل Sauce Labs أو BrowserStack أو LambdaTest من خلال نقطة نهاية WebDriver عن بعد.

سيبدو ملف testing.xml الخاص بك كالتالي:

عبر متصفح اختبار

سيتم تعيين ملف test.xml هذا مع ملف حالة الاختبار والتي تبدو مثل هذا:

عبر متصفح اختبار

لأن ملف testing.xml يحتوي على عدة وسوم اختبار ('ChromeTest', 'Firefox(اختبار، اختبار الحافة)، سيتم تنفيذ حالة الاختبار هذه مرة واحدة لكل متصفح.

سيُمرر الاختبار الأول 'ChromeTest' قيمة المعامل 'browser' كـ 'chrome'، وبالتالي سيتم تنفيذ ChromeDriver. سيتم تشغيل حالة الاختبار هذه على متصفح Chrome.

الاختبار الثانيFirefox"الاختبار" سوف يمرر قيمة المعلمة "المتصفح" كـ "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");
	}
}

test.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>

NOTE: لتشغيل الاختبار، انقر بزر الماوس الأيمن على test.xmlحدد "تشغيل كـ"، ثم انقر فوق TestNG جناح.

 عبر متصفح اختبار

التوسع باستخدام شبكات متصفح السحابة

الركض Selenium يدعم WebDriver محليًا متصفحين أو ثلاثة، لكن المستخدمين الحقيقيين يصلون إلى المواقع من مئات أنظمة التشغيل ومجموعات المتصفحات. مختبرات الحوسبة السحابية مثل مختبرات الصلصة, BrowserStackو LambdaTest قم بتعريض نقطة نهاية WebDriver عن بُعد. قم بتوجيهها إلى نفس Selenium الاختبارات على الشبكة، وتمرير الإمكانيات المطلوبة للمتصفح والإصدار ونظام التشغيل والدقة، وتتوسع المجموعة أفقيًا دون إدارة برامج التشغيل المحلية.

كما تُظهر الشبكات الحديثة ميزات مدعومة بالذكاء الاصطناعي مثل مقارنة الانحدار المرئي، ومحددات العناصر ذاتية الإصلاح، وتسجيل عدم الاستقرار، مما يقلل من تكاليف الصيانة على مجموعات اختبار المتصفحات المتقاطعة طويلة الأمد.

ملاحظة: تم بناء البرنامج المذكور واختباره على Selenium 4، كروم، Firefoxو Microsoft Edgeإذا ظهرت أخطاء في البرامج، يُرجى تحديث ملفات تعريف التشغيل لتتوافق مع إصدار المتصفح المُثبّت لديك، أو استخدام Selenium مدير يقوم بحل مشاكل تعريفات الأجهزة تلقائيًا.

تحميل Selenium ملفات المشروع للعرض التوضيحي في هذا البرنامج التعليمي

الأسئلة الشائعة

اختبار التوافق مع المتصفحات المختلفة هو أسلوب اختبار وظيفي ومرئي يتحقق من أن تطبيق الويب يعمل بنفس الطريقة على متصفح كروم. Firefoxو Safari و Microsoft Edge عبر أجهزة سطح المكتب والأجهزة المحمولة، بما في ذلك أنظمة التشغيل المختلفة وأحجام منافذ العرض.

Selenium يوفر WebDriver واجهة برمجة تطبيقات واحدة تشغل متصفح Chrome، Firefoxيدعم متصفحا Edge وSafari بروتوكول W3C WebDriver الرسمي. يعمل نفس رمز الاختبار على أي متصفح، مما يجعل Selenium WebDriver هو المعيار الفعلي لأتمتة المتصفح واختبار التوافق بين المتصفحات.

TestNG يستخدم ملف testing.xml مع parallel="tests" و thread-count لتشغيل كل علامة اختبار في سلسلة عمليات منفصلة. وبالاقتران مع إعداد @BeforeTest المُعَلم، فإن نفس Selenium تعمل مجموعة برامج WebDriver على متصفح Chrome، Firefox، و Edge في نفس الوقت، مما يقلل وقت التنفيذ الإجمالي.

توفر كل من Sauce Labs و BrowserStack و LambdaTest خدمات الاستضافة Selenium شبكات تعرض آلافًا من تركيبات أنظمة التشغيل والمتصفحات، بما في ذلك متصفح سفاري لنظام iOS و Android في متصفح كروم، قم بتوجيه RemoteWebDriver إلى نقطة نهاية الشبكة وقم بتمرير الإمكانيات المطلوبة لتشغيل نفس الكود على نطاق واسع.

تُقارن محركات الانحدار البصري المدعومة بالذكاء الاصطناعي، مثل تلك المدمجة في Applitools وPercy والوحدات المرئية في BrowserStack وLambdaTest، لقطات الشاشة دلاليًا بدلًا من مقارنتها بكسلًا بكسلًا. وهي تتجاهل الاختلافات المتوقعة في تنعيم الحواف أو عرض الخطوط بين متصفحات Chrome و Firefox، و Safari و Edge مع الاستمرار في اكتشاف حالات التراجع الحقيقية في التخطيط، مما يقلل بشكل كبير من النتائج الإيجابية الخاطئة في مسارات اختبار المتصفحات المتعددة.

نعم. أطر العمل الحديثة مثل Healenium، Testim، مابل، وميزات الذكاء الاصطناعي في Selenium تقوم بيئة التطوير المتكاملة (IDE) بتحليل نموذج كائن المستند (DOM) واقتراح مُحدِّدات XPath أو CSS مستقرة. عند تعطل أحد المُحدِّدات نتيجةً لتغيير في واجهة المستخدم، تُصلح المُحدِّدات المُولَّدة بواسطة الذكاء الاصطناعي نفسها تلقائيًا من خلال تقييم العناصر المجاورة واختيار أقرب تطابق، مما يُحافظ على نجاح اختبارات التوافق مع المتصفحات المختلفة مع تقليل الحاجة إلى الصيانة اليدوية.

تشمل العيوب الشائعة عدم تطابق الخطوط وعرض CSS، Javaعدم اتساق محرك البرمجة النصية، ودعم ميزات HTML5 أو ES المعطل، ومشاكل اتجاه الصور، ومشاكل محاذاة الصفحات، وبادئات البائع المفقودة، وأعطال خاصة بنظام التشغيل على متصفح سفاري في نظام iOS أو Android الكروم.

تلخيص هذه التدوينة بـ: