לחיצה על אלמנטים בסלניום באמצעות JavaScript

1. הקדמה

במדריך קצר זה, אנו נסתכל על דוגמה פשוטה כיצד ללחוץ ולרכיב ב- Selenium WebDriver באמצעות JavaScript.

לצורך ההדגמה שלנו נשתמש ב- JUnit ובסלניום כדי לפתוח //baeldung.com וחפש מאמרים מסוג "סלניום".

2. תלות

ראשית, אנו מוסיפים את סלניום-ג'אווה ו צומת תלות בפרויקט שלנו ב pom.xml:

 org.seleniumhq.selenium selenium-java 3.141.59 junit junit 4.13 test 

3. תצורה

לאחר מכן, עלינו להגדיר את WebDriver. בדוגמה זו נשתמש ביישום Chrome שלה:

@ לפני setUp הריק הציבורי () {System.setProperty ("webdriver.chrome.driver", קובץ חדש ("src / main / resources / chromedriver.mac"). GetAbsolutePath ()); מנהל התקן = ChromeDriver חדש (); }

אנו משתמשים בשיטה עם הערות @לפני לבצע את ההתקנה הראשונית לפני כל בדיקה. בפנים אנחנו קובעים את webdriver.chrome.driver נכס המגדיר את מיקום הנהג כרום. לאחר מכן, אנו מיישרים את WebDriver לְהִתְנַגֵד.

בסיום הבדיקה עלינו לסגור את חלון הדפדפן. אנו יכולים לעשות זאת על ידי הצבת ה- driver.close () הצהרה בשיטה עם הערה @לאחר. זה מוודא שהוא יבוצע גם אם הבדיקה נכשלה:

@ לאחר הריקון הפומבי cleanUp () {driver.close (); }

4. פתיחת הדפדפן

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

@ מבחן ציבורי בטל כאשר SearchForSeleniumArticles_thenReturnNotEmptyResults () driver.get ("// baeldung.com"); כותרת מחרוזת = driver.getTitle (); assertEquals ("באלדונג 

כאן, אנו משתמשים ב- driver.get () שיטה לטעינת דף האינטרנט. לאחר מכן, אנו מאמתים את כותרתו כדי לוודא שאנחנו במקום הנכון.

5. לחיצה על אלמנט באמצעות JavaScript

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

דוגמה אחת היא אם אנו רוצים ללחוץ על אלמנט מושבת. במקרה הזה, WebElement לחיצה אחת זורק IllegalStateException. במקום זאת, אנו יכולים להשתמש בתמיכת JavaScript של סלניום.

לשם כך הדבר הראשון שנצטרך הוא JavascriptExecutor. מכיוון שאנו משתמשים ב- ChromeDriver אנו יכולים פשוט להטיל את זה למה שאנחנו צריכים:

מנהל JavascriptExecutor = (JavascriptExecutor) מנהל התקן;

לאחר קבלת ה- JavascriptExecutor, אנחנו יכולים להשתמש בו executeScript שיטה. הטיעונים הם הסקריפט עצמו ומערך פרמטרי הסקריפט. במקרה שלנו, אנו קוראים לשיטת הקליק בטיעון הראשון:

executor.executeScript ("טיעונים [0] .click ();", רכיב);

עכשיו, בואו נרכיב אותו לשיטה אחת שאליה נקרא clickElement:

חלל ריק clickElement (אלמנט WebElement) {JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript ("טיעונים [0] .click ();", רכיב); }

ולבסוף, אנו יכולים להוסיף זאת למבחן שלנו:

@ מבחן פומבי בטל כאשר SearchForSeleniumArticles_thenReturnNotEmptyResults () {// ... load //baeldung.com WebElement searchButton = driver.findElement (By.className ("nav - menu_item_anchor")); clickElement (searchButton); WebElement searchInput = driver.findElement (By.id ("search")); searchInput.sendKeys ("סלניום"); WebElement seeSearchResultsButton = driver.findElement (By.cssSelector (". Btn-search")); clickElement (ראה SearchResultsButton); }

6. אלמנטים שאינם ניתנים ללחיצה

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

כדי להתגבר על בעיה זו, עלינו לעכב את הביצוע עד שהלחיצה זמינה. אנחנו יכולים להשתמש WebDriver המתן # עד לחכות עד שהכפתור יינתן.

ראשון, WebDriverWait האובייקט דורש שני פרמטרים; הנהג ופסק זמן:

WebDriverWait wait = חדש WebDriverWait (מנהל התקן, 5000); 

ואז, אנחנו מתקשרים עד, נותן את המצופה elementToBeClickable מַצָב:

wait.until (ExpectedConditions.elementToBeClickable (By.className ("nav - menu_item_anchor"))); 

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

WebElement searchButton = driver.findElement (By.className ("nav - menu_item_anchor")); clickElement (searchButton);

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

7. מסקנה

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


$config[zx-auto] not found$config[zx-overlay] not found