Clasa de acțiune în Selenium

⚡ Rezumat inteligent

Clasa de acțiune în Selenium gestionează evenimentele avansate de la tastatură și mouse, cum ar fi trecerea cu mouse-ul, drag-and-drop, clic dreapta și combinațiile de taste, prin intermediul API-ului Advanced User Interactions. Acest tutorial explică clasele Actions și Action, metodele tastelor și cum să înlănțui mai multe interacțiuni într-o singură secvență.

  • 🖱️ Scop principal: Clasa Actions automatizează evenimente compuse de mouse și tastatură pe care funcția simplă click() nu le poate face.
  • 🔑 Două clase: Acțiunile construiesc interacțiunea; Acțiunea stochează secvența compilată pentru execuție.
  • 🧱 Construiește apoi execută: Metode în lanț, se termină cu build() și se execută cu perform().
  • 📋 Metode cheie: moveToElement(), dragAndDrop(), keyDown()/keyUp(), contextClick() și sendKeys().
  • 🤖 Activare prin inteligență artificială: Asistenții AI generează cod de clasă Action și auto-repară localizatorii în timpul testelor de interacțiune.

Rezultat la trecerea mouse-ului peste

Clasa de acțiune în Selenium

Clasa de acțiune în Selenium este o funcție încorporată pentru gestionarea evenimentelor de la tastatură și mouse. Acceptă operațiuni precum clicuri multiple cu tasta Control, drag-and-drop și multe altele. Aceste operațiuni sunt efectuate folosind API-ul Advanced User Interactions din Selenium WebDriver.

Gestionarea evenimentelor de la tastatură și mouse

Gestionarea evenimentelor speciale de la tastatură și mouse se face folosind Advanced User Interactions API. Acesta conține Acţiuni și Acțiune clasele necesare pentru executarea acestor evenimente. Cele mai frecvent utilizate evenimente de tastatură și mouse furnizate de clasa Actions sunt enumerate mai jos.

Metodă Descriere
apasă si menține() Faceți clic (fără a elibera) în locația curentă a mouse-ului.
contextClick() Efectuează un clic contextual (clic dreapta) în locația curentă a mouse-ului.
doubleClick() Efectuează un dublu clic pe locația curentă a mouse-ului.
dragAndDrop(sursă, țintă) Clic și menținere apăsată pe elementul sursă, mutare la elementul țintă, apoi eliberare mouse-ului. Parametri: sursă (elementul pe care se apasă), țintă (elementul la care se eliberează).
dragAndDropBy(sursă, x-offset, y-offset) Se ține apăsat pe elementul sursă, se deplasează cu o anumită distanță, apoi se eliberează. Parametri: sursă, xOffset (orizontal), yOffset (vertical).
keyDown(cheie_modificatoare) Apasă o tastă modificatoare fără a o elibera, astfel încât interacțiunile ulterioare presupun că rămâne apăsată. Parametru: o tastă modificatoare (Keys.ALT, Keys.SHIFT sau Keys.CONTROL).
keyUp(tasta_modificatoare) Eliberează o tastă modificatoare. Parametru: o tastă modificatoare (Keys.ALT, Keys.SHIFT sau Keys.CONTROL).
moveByOffset(decalaj x, decalaj y) Mută ​​mouse-ul din poziția sa curentă (sau 0,0) cu offset-ul dat. Un x negativ se deplasează la stânga; un y negativ se deplasează în sus.
moveToElement(laElement) Mută ​​mouse-ul la mijlocul elementului. Parametru: elementul la care se va muta.
eliberare() Eliberează butonul stâng apăsat al mouse-ului în locația curentă.
sendKeys(onElement, charsequence) Trimite o serie de apăsări de taste către un element. Parametri: onElement (de obicei un câmp de text), charsequence (apăsările de taste de trimis).

În exemplul următor, folosim moveToElement() metodă de a trece cursorul peste unul dintre Mercury Rândurile tabelului Tours.

Gestionarea evenimentelor de la tastatură și mouse

Celula prezentată mai sus face parte dintr-o element. Când nu este plasat cu mouse-ul, culoarea sa este #FFC455 (portocaliu). După plasarea cu mouse-ul, culoarea celulei devine transparentă și se potrivește cu fundalul tabelului din jur.

Pas 1) Importați fișierul Acţiuni și Acțiune clase.

Importați acțiuni și clase de acțiuni

Pas 2) Instanciați un nou obiect Actions.

Obiect Instanțiere Acțiuni

Pas 3) Instanțiați o acțiune folosind obiectul Actions de la pasul 2.

Obiect Acțiune Instanțiere

Aici folosim moveToElement() metodă pentru a trece cu mouse-ul peste linkul „Acasă”. build() Metoda este întotdeauna apelată ultima, astfel încât toate acțiunile listate sunt compilate într-un singur pas.

Pas 4) Folosește perform() metodă de executare a obiectului Action proiectat în Pasul 3.

Efectuați acțiunea

Mai jos este codul WebDriver complet care verifică culoarea de fundal a element înainte și după trecerea mouse-ului peste el.

package newproject;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;

public class PG7 {

    public static void main(String[] args) {
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        System.setProperty("webdriver.gecko.driver", "C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        driver.get(baseUrl);
        WebElement link_Home = driver.findElement(By.linkText("Home"));
        WebElement td_Home = driver.findElement(By.xpath(
            "//html/body/div/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr/td"
            + "/table/tbody/tr"));

        Actions builder = new Actions(driver);
        Action mouseOverHome = builder.moveToElement(link_Home).build();

        String bgColor = td_Home.getCssValue("background-color");
        System.out.println("Before hover: " + bgColor);
        mouseOverHome.perform();
        bgColor = td_Home.getCssValue("background-color");
        System.out.println("After hover: " + bgColor);
        driver.close();
    }
}

Rezultatul de mai jos arată că culoarea de fundal a devenit transparentă după trecerea mouse-ului peste ea.

Rezultat la trecerea mouse-ului peste

Construirea unei serii de acțiuni multiple

Puteți construi o serie de acțiuni folosind clasele Action și Actions. Nu uitați să închideți seria cu build() metodă. Luați în considerare codul exemplu de mai jos.

Construirea unei serii de acțiuni multiple

public static void main(String[] args) {
    String baseUrl = "https://www.facebook.com/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    WebElement txtUsername = driver.findElement(By.id("email"));

    Actions builder = new Actions(driver);
    Action seriesOfActions = builder
        .moveToElement(txtUsername)
        .click()
        .keyDown(txtUsername, Keys.SHIFT)
        .sendKeys(txtUsername, "hello")
        .keyUp(txtUsername, Keys.SHIFT)
        .doubleClick(txtUsername)
        .contextClick()
        .build();

    seriesOfActions.perform();
}

Rezultat al seriei de acțiuni

Întrebări frecvente

Clasa Action reprezintă o secvență compilată de interacțiuni cu tastatura și mouse-ul, construite cu ajutorul clasei Actions. Aceasta este executată prin intermediul API-ului Advanced User Interactions în Selenium WebDriver.

Actions (plural) este constructorul folosit pentru a înlănțui interacțiuni precum plasarea cursorului și clicul. Action (singular) este obiectul compilat returnat de build() pe care îl rulezi cu perform().

build() compilează toate interacțiunile înlănțuite într-o singură acțiune compozită. Este întotdeauna apelată ultima, chiar înainte de perform(), astfel încât pașii din coadă se execută împreună ca o singură secvență.

Funcția perform() execută acțiunea încorporată asupra browserului. Fără aceasta, interacțiunile înlănțuite sunt doar puse în coadă și nu sunt niciodată trimise efectiv către pagină.

Folosește moveToElement(element) pe un obiect Actions, apoi apelează build() și perform(). Aceasta mută cursorul în centrul elementului și declanșează orice comportament de trecere cu mouse-ul, cum ar fi un meniu derulant.

Acceptă comenzile clickAndHold, contextClick, doubleClick, dragAndDrop, dragAndDropBy, keyDown, keyUp, moveByOffset, moveToElement, release și sendKeys — acoperind majoritatea interacțiunilor avansate.

Instrumentele de inteligență artificială folosesc localizatori cu auto-reparare care se adaptează atunci când elementele se schimbă, reducând erorile instabile în testele hover și drag-and-drop. De asemenea, recomandă XPath-uri stabile și adaugă automat așteptări inteligente.

Da. Asistenții de codare cu inteligență artificială transformă un scenariu în limba engleză simplă, cum ar fi „plasați cursorul peste Acasă, apoi faceți clic dreapta” într-un lanț de acțiuni funcțional cu build() și perform() și sugerează localizatori robusti.

Rezumați această postare cu: