איך להפוך את DOM הצללית לאוטומטית ב-Selenium WebDriver

I came across one of the test cases in my previous projects where I had to click on a button to navigate to the next page. I searched for the element locator of the button on the page and ran the tests hoping it would click the button and navigate to the next page.

אבל להפתעתי, הבדיקה נכשלה כיוון שלא יכלה למצוא את האלמנט, וקיבלתי NoSuchElementException ביומן התיקיות של הקונסול. לא הייתי שמח לראות את השגיאה הזו כיוון שזה היה כפתור פשוט שניסיתי ללחוץ עליו, ולא היה בו מורכבות.

בניתוח הבעיה נוסף, הרחבת ה-DOM ובדיקת האלמנטים השורש, גיליתי שמיקום הכפתור היה בתוך עץ ה-#shadow-root(open), מה שגרם לי להבין שזה צריך להיענות עליו אחרת כיוון שזה אלמנט Shadow DOM.

במדריך זה של Selenium WebDriver, נדון באלמנטים Shadow DOM וכיצד להתמודד עם Shadow DOM ב-Selenium WebDriver. לפני שנעבור להתמודדות עם Shadow DOM ב-Selenium, בואו קודם כל נבין מהו Shadow DOM ולמה הוא משמש כך?

מהו Shadow DOM?

Shadow DOM היא פונקציונליות המאפשרת לדפדפן האינטרנט להציג אלמנטי DOM מבלי לשים אותם בעץ ה-DOM הראשי של המסמך. זה יוצר מחיצה בין מה שהמפתח והדפדפן יכולים להגיע אליו; המפתח אינו יכול לגשת ל-Shadow DOM באותו אופן שהוא יכול לגשת לאלמנטים מקונן, ובכך שהדפדפן יכול להציג ולשנות את הקוד באותו אופן שהוא יכול לעשות עם אלמנטים מקוננים.

Shadow DOM היא דרך להשיג אנקסופגלציה במסמך HTML. על ידי יישום זה, אפשר לשמור על הסגנון וההתנהגות של חלק אחד מהמסמך חבויים ונפרדים מהקוד האחר של אותו מסמך כך שלא יהיה הפרעה.

Shadow DOM מאפשר להצמיד עצי DOM חבויים לאלמנטים בעץ ה-DOM הרגיל – עץ Shadow DOM מתחיל עם שורש הצללית, מתחת לו אפשר להצמיד כל אלמנט באותו אופן כמו ב-DOM הרגיל.

יש כמה מונחים בנוגע לדום הצל שכדאי להכיר:

  • מארח הצל: הצומת הרגיל של דום הארגון שממנו מחובר דום הצל
  • עץ הצל: עץ הארגון בתוך דום הצל
  • גבול הצל הוא המקום בו מסתיים דום הצל ומתחיל הדום הרגיל.
  • שורש הצל: צומת השורש של עץ הצל

מהי השימוש בדום הצל?

דום הצל משמש להכסוייה. זה מאפשר לרכיב להחזיק בעצמו "עץ צל" שלא ניתן לגשת לו בטעות מהמסמך הראשי, יכול להכיל כללי דוגמא מקומיים, ועוד.

הנה כמה מהתכונות הבסיסיות של דום הצל:

  • יש להם מרחב ערכי תוויות משלהם
  • בלתי נראים לבחירות JavaScript מהמסמך הראשי, כגון querySelector
  • משתמשים בסגנונות רק מעץ הצל, לא מהמסמך הראשי

מציאת רכיבי דום הצל באמצעות Selenium WebDriver

כשאנו מנסים למצוא את רכיבי דום הצל באמצעות מיקומים של Selenium, אנו מקבלים NoSuchElementException מאחר והוא אינו נגיש באופן ישיר לדום הארגון.

היינו משתמשים באסטרטגיה הבאה לגישה למיקומי דום הצל:

  • באמצעות JavaScriptExecutor.
  • באמצעות שיטת getShadowDom() של Selenium WebDriver.

בחלק זה של הבלוג על אוטומציה של Shadow DOM ב-Selenium, בואו ניקח דוגמא של דף הבית של Watir.com וננסה לאשר את טקסט ה-Shadow DOM וה-Shadow DOM המקונן עם Selenium WebDriver. שימו לב שיש אלמנט שורש אחד של Shadow לפני שאנו מגיעים לטקסט -> טקסט מסוים, ויש שני אלמנטים שורש של Shadow לפני שאנו מגיעים לטקסט -> טקסט מקונן.

עכשיו, אם ננסה למצוא את האלמנט באמצעות cssSelector(“#shadow_content > span”), זה
לא נמצא, ו-Selenium WebDriver יזרוק NoSuchElementException.

הנה תמונת צפייה של מחלקת הבית, שבה יש את הקוד שמנסה לקבל את הטקסט באמצעות
cssSelector(“#shadow_content > span”).

הנה תמונת הצפייה של הבדיקות בהן אנו מנסים לאשר את הטקסט(“טקסט מסוים”).

שגיאה בריצת הבדיקות מצביעה על NoSuchElementException

כדי למצוא את האלמנט באופן תקין עבור הטקסט, אנו צריכים לעבור דרך אלמנטי שורש של Shadow. רק אז נוכל למצוא את “טקסט מסוים” ו-“טקסט מקונן” בדף?

איך למצוא Shadow DOM ב-Selenium WebDriver באמצעות השיטה 'getShadowDom'

עם השחרור של גרסת 4.0.0 ומעלה של Selenium WebDriver, הוספה השיטה getShadowRoot() ועזרה למצוא אלמנטי שורש של Shadow.

הנה התחביר והפרטים של שיטת ה-getShadowRoot():

Java

 

	default SearchContext getShadowRoot()
	
	Returns:
	The ShadowRoot class represents the shadow root of a web component. With a shadow root, you can access the shadow DOM of a web component.
	
	Throws:
	NoSuchShadowRootException - If shadow root is not found.

על פי התיעוד, שיטת getShadowRoot() מחזירה ייצוג של שורש הצללית של אלמנט לגישה ל-Shadow DOM של רכיב האינטרנט.

במידה ולא נמצא שורש הצללית, היא תזרוק NoSuchShadowRootException.

לפני שנתחיל לכתוב את הבדיקות ולדון בקוד, הרשה לי לספר לך על הכלים שנשתמש בהם לכתיבת וריצת הבדיקות:

השפה התכנותית והכלים הבאים נמצאו בשימוש בכתיבת וריצת הבדיקות:

  • שפת תכנות: Java 11
  • כלי אוטומציה אינטרנט: Selenium WebDriver
  • ריצת בדיקות: TestNG
  • כלי בניית פרויקט: Maven
  • פלטפורמת ענן: LambdaTest

התחלה עם מציאת Shadow DOM ב-Selenium WebDriver

כפי שדיברנו קודם, פרויקט זה על Shadow DOM ב-Selenium נוצר באמצעות Maven. TestNG משמש כרצועת בדיקות. כדי ללמוד עוד על Maven, תוכל לעבור על בלוג זה על התחלה עם Maven לבדיקות Selenium.

ברגע שנוצר הפרויקט, עלינו להוסיף את התלות של Selenium WebDriver, ו-TestNG בקובץ pom.xml.

גרסאות של ההסמכויות מוגדרות במסד ערכים נפרד. זה נעשה למען שמירת התחזוקה, כך שאם נצטרך לעדכן את הגרסאות, נוכל לעשות זאת בקלות מבלי לחפש את ההסמך ברחבי הקובץ pom.xml.

Java

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>io.github.mfaisalkhatri</groupId>
   <artifactId>shadowdom-selenium</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <selenium.java.version>4.4.0</selenium.java.version>
       <testng.version>7.6.1</testng.version>
       <webdrivermanager.version>5.2.1</webdrivermanager.version>
       <maven.compiler.version>3.10.1</maven.compiler.version>
       <surefire-version>3.0.0-M7</surefire-version>
       <java.release.version>11</java.release.version>
       <maven.source.encoding>UTF-8</maven.source.encoding>
       <suite-xml>testng.xml</suite-xml>
       <argLine>-Dfile.encoding=UTF-8 -Xdebug -Xnoagent</argLine>
   </properties>

   <dependencies>
   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependency>
       <groupId>org.seleniumhq.selenium</groupId>
       <artifactId>selenium-java</artifactId>
       <version>${selenium.java.version}</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/org.testng/testng -->
   <dependency>
       <groupId>org.testng</groupId>
       <artifactId>testng</artifactId>
       <version>${testng.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>io.github.bonigarcia</groupId>
       <artifactId>webdrivermanager</artifactId>
       <version>${webdrivermanager.version}</version>
       <exclusions>
           <exclusion>
               <groupId>com.google.guava</groupId>
               <artifactId>guava</artifactId>
           </exclusion>
       </exclusions>
   </dependency>
   </dependencies>

   <build>
   <plugins>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>${maven.compiler.version}</version>
       <configuration>
           <release>${java.release.version}</release>
           <encoding>${maven.source.encoding}</encoding>
           <forceJavacCompilerUse>true</forceJavacCompilerUse>
       </configuration>
   </plugin>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>${surefire-version}</version>
       <executions>
           <execution>
               <goals>
                   <goal>test</goal>
               </goals>
           </execution>
       </executions>
       <configuration>
           <useSystemClassLoader>false</useSystemClassLoader>
           <properties>
               <property>
                   <name>usedefaultlisteners</name>
                   <value>false</value>
               </property>
           </properties>
           <suiteXmlFiles>
               <suiteXmlFile>${suite-xml}</suiteXmlFile>
           </suiteXmlFiles>
           <argLine>${argLine}</argLine>
       </configuration>
   </plugin>
   </plugins>
   </build>
</project>

בואו נעבור לקוד עכשיו; מודל אובייקט הדף (POM) שימש בפרויקט זה מכיוון שהוא מסייע בהפחתת שכפול בקוד ובשיפור תחזוקת מקרא הבדיקות.

קודם כל, נמצא את המצביע ל" טקסט מסוים " ו" טקסט מקונן " בדף הבית.

Java

 

public class HomePage {

   public SearchContext expandRootElement (WebElement element) {
       SearchContext shadowRoot = (SearchContext) ((JavascriptExecutor) getDriver ()).executeScript (
           "return arguments[0].shadowRoot", element);
       return shadowRoot;
   }
   public String getSomeText () {
       return getDriver ().findElement (By.cssSelector ("#shadow_content > span"))
           .getText ();
   }

   public String getShadowDomText () {
       WebElement shadowHost = getDriver ().findElement (By.id ("shadow_host"));
       SearchContext shadowRoot = shadowHost.getShadowRoot ();
       String text = shadowRoot.findElement (By.cssSelector ("#shadow_content > span"))
           .getText ();
       return text;
   }

   public String getNestedShadowText () {
       WebElement shadowHost = getDriver ().findElement (By.id ("shadow_host"));
       SearchContext shadowRoot = shadowHost.getShadowRoot ();
       WebElement shadowContent = shadowRoot.findElement (By.cssSelector ("#nested_shadow_host"));
       SearchContext shadowRootTwo = shadowContent.getShadowRoot ();
       String nestedText = shadowRootTwo.findElement (By.cssSelector ("#nested_shadow_content > div")).getText ();
       return nestedText;
   }

   public String getNestedText() {
     WebElement nestedText = getDriver ().findElement (By.id ("shadow_host")).getShadowRoot ()
         .findElement (By.cssSelector ("#nested_shadow_host")).getShadowRoot ()
         .findElement (By.cssSelector ("#nested_shadow_content > div"));
     return nestedText.getText ();
   }

   public String getNestedTextUsingJSExecutor () {
       WebElement shadowHost = getDriver ().findElement (By.id ("shadow_host"));
       SearchContext shadowRootOne = expandRootElement (shadowHost);
       WebElement nestedShadowHost = shadowRootOne.findElement (By.cssSelector ("#nested_shadow_host"));
       SearchContext shadowRootTwo = expandRootElement (nestedShadowHost);
       return shadowRootTwo.findElement (By.cssSelector ("#nested_shadow_content > div"))
           .getText ();

   }
}

הדרך בקוד

האלמנט הראשון שנמצא ב < div id = "shadow_host" > על ידי שימוש באסטרטגיה של מצביע – id.

Java

 

	WebElement shadowHost = getDriver ().findElement (By.id ("shadow_host"));

לאחר מכן, אנו מחפשים את השורש השדה האפל הראשון ב-DOM לידו. לשם כך, השתמשנו בממשק SearchContext. השורש השדה האפל מוחזר באמצעות השיטה getShadowRoot(). אם תבדקו את הצילום המסך למעלה, #shadow-root (open) הוא ליד < div id = "shadow_host" >.

למציאת הטקסט – " טקסט מסוים, " יש רק אלמנט אחד של DOM השדה האפל שעלינו לעבור.

השורה הבאה של קוד עוזרת לנו להשיג את אלמנט השורש השדה האפל.

Java

 

	SearchContext shadowRoot = downloadsManager.getShadowRoot();

ברגע שנמצא השורש השדה האפל, אנו יכולים לחפש את האלמנט למציאת הטקסט – " טקסט מסוים ". השורה הבאה של קוד עוזרת לנו להשיג את הטקסט:

Java

 

	String text = shadowRoot.findElement (By.cssSelector ("#shadow_content > span"))
	 .getText ();

בשלב הבא, בואו נמצא את מיקומו של "טקסט מקונן," אשר כולל אלמנט שורה של צללית מקונן, ובואו נגלה כיצד למצוא את האלמנט שלו. 

שיטת getNestedShadowText():

תחילה, כפי שדנו בקטע הקודם, עלינו למצוא
<קוד>< div id = "shadow_host" > באמצעות אסטרטגיה מיקום – id

Java

 

	WebElement shadowHost = getDriver ().findElement (By.id ("shadow_host"));

לאחר מכן, עלינו למצוא את אלמנט שורת הצללית באמצעות השיטה getShadowRoot(); ברגע שנשיג את אלמנט שורת הצללית, נצטרך להיכנס למציאת שורת הצללית השנייה באמצעות cssSelector למיקום:

Java

 

	<div id ="nested_shadow_host">
Java

 

SearchContext shadowRoot = shadowHost.getShadowRoot ();
	WebElement shadowContent = shadowRoot.findElement (By.cssSelector ("#nested_shadow_host"));

לאחר מכן, עלינו למצוא את אלמנט שורת הצללית השנייה באמצעות השיטה <קוד>getShadowRoot(). לבסוף, הגיע הזמן למצוא את האלמנט האמיתי להשגת הטקסט – "טקסט מקונן."
השורה הבאה של קוד תעזור לנו במיקוד הטקסט:

Java

 

SearchContext shadowRootTwo = shadowContent.getShadowRoot ();
	String nestedText = shadowRootTwo.findElement (By.cssSelector ("#nested_shadow_content > div"

כתיבת הקוד בצורה זריזה

בקטע הקודם של בלוג זה על Shadow DOM ב-Selenium, ראינו דרך ארוכה מאז שעלינו למצוא את האלמנט האמיתי שאנו רוצים לעבוד איתו, ועלינו לבצע מספר אתחולים של ממשקים WebElement ו-SearchContext ולכתוב מספר שורות קוד כדי למצוא אלמנט יחיד לעבוד איתו.

יש לנו גם דרך זריזה לכתיבת כל הקוד הזה, וככה תוכלו לעשות זאת:

Java

 

public String getNestedText() {
	 WebElement nestedText = getDriver ().findElement (By.id ("shadow_host"))
		 .getShadowRoot ()
		 .findElement (By.cssSelector ("#nested_shadow_host"))
		 .getShadowRoot ()
		 .findElement (By.cssSelector ("#nested_shadow_content > div"));
	 return nestedText.getText ();
	}

ממשק פלואנטי מבוסס באופן משמעותי על שרשור שיטות. תבנית ממשק פלואנטי עוזרת לנו לכתוב קוד קריאה קלה שניתן להבין מבלי להשקיע מאמץ טכני בהבנת הקוד. מונח זה נולד לראשונה בשנת 2005 על ידי אריק אוונס ומרטין פולר.

זוהי שיטת שרשור שנבצע כדי למצוא את האלמנט.

הקוד הזה עושה את אותו הדבר כמו שעשינו בשלבים לעיל.

  1. ראשית, נמצא את האלמנט shadow_host באמצעות ה-id שלו, לאחר מכן נשיג את אלמנט Shadow Root באמצעות השיטה getShadowRoot().
  2. לאחר מכן, נחפש את האלמנט nested_shadow_host באמצעות בחירת CSS ונשיג את אלמנט Shadow Root באמצעות השיטה getShadowRoot().
  3. לבסוף, נשיג את הטקסט "טקסט מקושר" באמצעות בחירת cssSelector – nested_shadow_content > div.

כיצד למצוא את Shadow DOM ב-Selenium באמצעות JavaScriptExecutor

בדוגמאות הקוד לעיל, מצאנו אלמנטים באמצעות השיטה getShadowRoot(). בואו נראה כיצד ניתן למצוא את אלמנטי השורש הצלעות באמצעות JavaScriptExecutor ב-Selenium WebDriver.

getNestedTextUsingJSExecutor() שיטה נוצרה בתוך מחלקת HomePage,
שם נרחיב את אלמנט Shadow Root על פי האלמנט האינטרנטי שאנו מעבירים בפרמטר. ב-DOM (כפי שמוצג בתצלום המסך לעיל), ראינו שיש שני אלמנטים של Shadow Root שעלינו להרחיב לפני שנגיע לאיתור האמיתי לקבלת הטקסט – טקסט מקונן. לכן, נוצרה השיטה expandRootElement() במקום להדביק בכפול את אותו קוד משתמש ב-JavaScript executor בכל פעם.

ניישם את ממשק SearchContext, שיעזור לנו עם JavaScriptExecutor ויחזיר את אלמנט Shadow root על פי האלמנט האינטרנטי שאנו מעבירים בפרמטר.

Java

 

	public SearchContext expandRootElement (WebElement element) {
	   SearchContext shadowRoot = (SearchContext) ((JavascriptExecutor) getDriver ()).executeScript (
		   "return arguments[0].shadowRoot", element);
	   return shadowRoot;
	}

שיטת getNestedTextUsingJSExecutor()

האלמנט הראשון שנמצא הוא < div id = "shadow_host" > על ידי שימוש באסטרטגיה של איתור – id.

לאחר מכן, נרחיב את אלמנט השורש Shadow על פי האלמנט shadow_host שחיפשנו.

Java

 

	WebElement shadowHost = getDriver ().findElement (By.id ("shadow_host"));
	SearchContext shadowRootOne = expandRootElement (shadowHost);

לאחר הרחבת Shadow Root אחד, נוכל לחפש אלמנט אינטרנטי נוסף באמצעות cssSelector לאיתור:

Java

 

	<div id ="nested_shadow_host">
Java

 

WebElement nestedShadowHost = shadowRootOne.findElement (By.cssSelector ("#nested_shadow_host"));
	SearchContext shadowRootTwo = expandRootElement (nestedShadowHost);

לבסוף, הגיע הזמן למצוא את האלמנט האמיתי לקבלת הטקסט – " טקסט מקונן."

השורה הבאה של קוד תעזור לנו באיתור טקסט:

Java

 

shadowRootTwo.findElement (By.cssSelector ("#nested_shadow_content > div"))
				.getText ();

הדגמה

בסעיף זה של המאמר על Shadow DOM ב-Selenium, בואו נכתוב במהירות בדיקה ונבדוק שהמיקודים שמצאנו בשלבים הקודמים מספקים לנו את הטקסט הנחוץ. אנו יכולים לבצע אמון על הקוד שכתבנו כדי לאמת שמה שאנו מצפים מהקוד פועל.

Java

 

@Test
	public void testShadowDomWatir () {
	   getDriver ().get ("http://watir.com/examples/shadow_dom.html");
	   HomePage homePage = new HomePage ();
	  // assertEquals (homePage.getSomeText(), "some text");
	   assertEquals (homePage.getShadowDomText (), "some text");
	   assertEquals (homePage.getNestedShadowText (),"nested text");
	   assertEquals (homePage.getNestedText (), "nested text");
	   assertEquals (homePage.getNestedTextUsingJSExecutor (), "nested text");
	}

זו רק בדיקה פשוטה כדי לאמת שהטקסטים מוצגים בצורה נכונה כפי שצפוי. אנו נבדוק זאת באמצעות האמון assertEquals() ב-TestNG.

בערך אמיתי, נספק את השיטה שכתבנו רק כדי לקבל את הטקסט מהעמוד, ובערך הצפוי, נעביר את הטקסט “some text” או “nested text,” תלוי באמונות שנעשה.

יש ארבעה משפטי assertEquals שמסופקים בבדיקה.

  • בדיקת אלמנט Shadow DOM באמצעות השיטה getShadowRoot():

  • בדיקת אלמנט Shadow DOM מקונן באמצעות השיטה getShadowRoot():

  • בדיקת אלמנט Shadow DOM מקונן באמצעות השיטה getShadowRoot() וכתיבה זורמת:

ביצוע

יש שתי דרכים לרוץ על הבדיקות לאוטומציה של Shadow DOM ב-Selenium:

  1. מהIDE באמצעות TestNG
  2. מ-CLI באמצעות Maven

אוטומציה של Shadow DOM ב-Selenium WebDriver באמצעות TestNG

TestNG משמש כרצון בדיקות. לכן נוצר testng.xml, שבאמצעותו נרוץ על הבדיקות על ידי לחיצה ימנית על הקובץ ובחירת האפשרות הפעל '…\testng.xml'. אך לפני ריצת הבדיקות, עלינו להוסיף את שם המשתמש ומפתח הגישה של LambdaTest בהגדרות הריצה מאחר שאנו קוראים את שם המשתמש ומפתח הגישה מתכונת המערכת.

LambdaTest מציעה בדיקת זרם דפדפנים בחוות דפדפנים מקוונים של מעל 3000 דפדפנים אמיתיים ומערכות הפעלה כדי לעזור לך לרוץ בדיקות Java גם מקומית וגם בענן. אתה יכול להאיץ את הבדיקות של Selenium עם Java ולהקטין את זמן ביצוע הבדיקות על ידי כפולות על ידי ריצת בדיקות מקבילות על דפדפנים ותצורות מערכות ההפעלה שונות.

  • הוסף ערכים בהגדרת הריצה כפי שמוזכר להלן:
    • Dusername = < שם משתמש של LambdaTest >
    • DaccessKey = < מפתח הגישה של LambdaTest >
Java

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests">
   <test name="Shadow DOM Tests on Watir Website">
       <parameter name="browser" value="remote-chrome"/>
       <classes>
           <class name="ShadowDomTests">
               <methods>
                   <include name="testShadowDomWatir"/>
               </methods>
           </class>
       </classes>
   </test> <!-- Test -->
</suite>

הנה תמונת צפייה של ריצת הבדיקה מקומית עבור Shadow DOM ב-Selenium באמצעות Intellij IDE.

אוטומציה של Shadow DOM ב-Selenium WebDriver באמצעות Maven

כדי לרוץ על הבדיקות באמצעות Maven, יש לבצע את הצעדים הבאים כדי לאוטומט של Shadow DOM ב-Selenium:

  1. פתח פקודת Prompt/Terminal.
  2. נווט לכיוון תיקיית השורש של הפרויקט.
  3. הקלד את הפקודה: mvn clean install -Dusername=< שם משתמש של LambdaTest > -DaccessKey=< מפתח הגישה של LambdaTest >.

הבאה היא תמונת צפייה מ-IntelliJ, שמראה את סטטוס הביצוע של הבדיקות באמצעות Maven:

לאחר שהבדיקות מתבצעות בהצלחה, ניתן לבדוק את לוח הבקרה של LambdaTest ולצפות בכל שיתוף הסרטונים, תמונות, יומני מכשיר, ופרטים גרנולריים צעד-אחר-צעד של הביצוע של הבדיקה. בדוק את התמונות למטה, שייתנו לך מושג סביר על הלוח לבדיקות אפליקציות אוטומטיות.

לוח הבקרה של LambdaTest

התמונות הבאות מראות את הפרטים של הבנייה והבדיקות שנערכו לאוטומציה של Shadow DOM ב-Selenium. שוב, שמות הבדיקות, שמות הדפדפן, גרסת הדפדפן, שמות המערכת הפעלה, גרסת המערכת הפעלה המתאימה, ורזולוציית המסך כולם גלויים באופן נכון עבור כל בדיקה.

יש לה גם את הסרטון של הבדיקה שנערכה, מה שנותן מושג טוב יותר על איך הבדיקות נערכו על המכשיר.

פרטי הבנייה

מסך זה מראה את כל המדדים בפירוט, שהם שימושיים מאוד מנקודת מבטו של הבודק כדי לבדוק איזו בדיקה נערכה על איזה דפדפן ובהתאם לצפות ביומנים לאוטומציה של Shadow DOM ב-Selenium.

פרטים על הבנייה – עם יומנים

אפשר לגשת לתוצאות הבדיקות האחרונות, למצבן ולמספר הבדיקות שעברו או נכשלו בלוח הניהול של LambdaTest Analytics. בנוסף, אפשר לראות תצלומים של רצועות הבדיקה האחרונות בסעיף סקירת הבדיקות.

מסקנה

בבלוג זה על אוטומציה של Shadow DOM ב-Selenium, דנו באופן מציאת אלמנטים ב-Shadow DOM ובאוטומציה שלהם באמצעות השיטה getShadowRoot() הזכתה בגרסה 4.0.0 ומעלה של Selenium WebDriver.

דנו גם במציאת ואוטומציה של אלמנטים ב-Shadow DOM באמצעות JavaScriptExecutor ב-Selenium WebDriver ובריצת הבדיקות בממשק של LambdaTest, שמציג פרטים גרסניים על הבדיקות שנערכו עם יומני Selenium WebDriver.

I hope this blog on Shadow DOM in Selenium gives you a fair idea about automating Shadow DOM elements using Selenium WebDriver.

שמחים בבדיקות!

Source:
https://dzone.com/articles/how-to-automate-shadow-dom-in-selenium-webdriver