Java >> Java tutorial >  >> Tag >> class

Selenium Java Tutorial – Klassenavn Locator i Selenium

CSS Locator i Selenium er et af de vigtigste aspekter ved at skrive et script. Hvis du ikke kan finde et element ved at bruge en hvilken som helst CSS-locator i Selenium, vil det være en svær opgave at være dygtig til Selenium-automatisering. Selen giver flere måder at lokalisere et element på.

Du kan tjekke andre artikler om forskellige CSS-locatorer i Selenium, der hjælper med at lokalisere elementer på forskellige måder:

  • Linktekst og delvis linktekst i selen
  • ID-finder i Selen
  • Navnefinder i Selen
  • Tagnavn-finder i Selen
  • CSS-vælger i Selen
  • XPath i Selenium

Hvis du er en avanceret eller medium Selenium Java praktiserende læge, så kan du kaste dig over dedikerede artikler nævnt ovenfor. Jeg har skrevet en komplet vejledning for at hjælpe dig med at illustrere den praktiske demonstration af CSS-locator i Selenium.

Tjek min komplette guide til hver CSS-finder i Selenium WebDriver med eksempler

I denne Selenium Java-tutorial vil jeg henvise til Klassenavnsfinder i Selenium for at demonstrere, hvordan man lokaliserer et element på en webside via klassenavn.

Kom godt i gang med Class Name Locator i Selen med eksempel

For at bruge klassenavnslokalisator i Selenium skal vi bruge nedenstående syntaks:
findElement(By.className("_up0kwni "))

Lad os nu se nærmere på koden for at finde elementer efter klassenavn i locatorer:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ClassNameLocator {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        
        driver.manage().window().maximize();
        
        //Opening the air bnb home page
        driver.get("https://www.airbnb.co.in/");
        
        //Locating location field for the search  form via class name 
        driver.findElement(By.className("_up0kwni")).sendKeys("Goa", Keys.ENTER);

        //Locating check-in field for the search  form via class name 
        driver.findElement(By.className("_14fdu48d")).click();
        
        //Locating the date 12th June for check-in field
        driver.findElement(By.className("_1wh4xpp1")).click();
                
        //closing the driver
        driver.quit();
        
        

    }


}

Ret simpelt, er det ikke? I den kommende session af denne Java Selenium tutorial vil vi lære, hvordan man håndterer en almindelig undtagelse for klassenavnsfinder i Selenium.

En af de mest almindelige undtagelser for klassenavnefinder i selen

En anden interessant kendsgerning og en populær fejl, du kan støde på, mens du bruger Class name locator i Selenium, ville være noget som:

Jeg er sikker på, at du måske er stødt på denne fejl. Lad os prøve at inkorporere dette scenario i nedenstående kodestykke til Facebook-tilmeldingssiden. Nedenfor er DOM-strukturen for facebook 'fornavn'-feltet med klassenavnsattribut fremhævet nedenfor:

Refereret kodestykke, der forsøger at få adgang til fornavnsfeltet ved hjælp af klassenavnsfinderen i Selenium:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ClassNameLocator {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        
        driver.manage().window().maximize();
        
        //Opening the air bnb home page
        driver.get("https://www.facebook.com/");
        
        //Locating by firstname via class name 
        driver.findElement(By.className("inputtext _58mg _5dba _2ph-")).sendKeys("Sadhvi");
        
                
        //closing the driver
        driver.quit();
        
        

    }

}

Refereret konsolfejl nedenfor:

Hvordan håndterer man denne fejl? Nå, Selen betragter dette som en sammensat klasse, hvilket betyder mere end én klasse markeret gennem mellemrum. Så ethvert klassenavn med mellemrum i det vil blive betragtet som to eller tre eller flere klasser.

I dette tilfælde indeholder dette klassenavn markeret som 'inputtext _58mg _5dba _2ph-' tre mellemrum, hvilket gør det til tre forskellige klasser. Derfor nævner Selenium fejlen og angiver, at det ikke kan finde flere klasser sammen . I dette tilfælde kan du vælge at lokalisere element ved hjælp af CSS-vælger i Selenium eller af XPath i Selenium ved hjælp af klassenavn-attributten . Det refererede kodestykke nedenfor:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ClassNameLocator {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        
        driver.manage().window().maximize();
        
        //Opening the facebook home page
        driver.get("https://www.facebook.com/");
        
        //Locating by firstname via class name 
        driver.findElement(By.xpath("//input[@class='inputtext _58mg _5dba _2ph-']")).sendKeys("Sadhvi");
        
                
        //closing the driver
        driver.quit();
        
        

    }

}

Hvordan finder man et element, når vi har flere elementer, der deler det samme klassenavn?

Nu ved du, hvornår du skal bruge klassenavnet, og hvornår du ikke kan bruge klassenavne. Men har du nogensinde forestillet dig scenariet, når du har flere elementer, der deler det samme klassenavn? Hvordan tackler du den situation? Dette er igen noget, du simpelthen kan opnå ved at bruge findElements-søgeordet . Alt du skal gøre er at finde alle elementer med det pågældende klassenavn ved hjælp af søgeordet findElements og gentage det påkrævede elementklassenavn via indeks. Når det er sagt, vil jeg hellere foreslå at undersøge en alternativ metode til at lokalisere dette element i stedet for dette. Da dens tendens til at gå i stykker vil være ret høj og kan føre til fejl.

Eksempel på Klassenavn Locator i selen for flere elementer med et lignende klassenavn

Lad os overveje nedenstående eksempel og fremhæve scenariet ovenfor. I dette tilfælde overvejer vi LinkedIn tilmeldingssiden, hvor alle felter deler det samme klassenavn. I dette tilfælde skal vi bemærke to vigtige ting:

  • Hvis nej, er indekset defineret, så vælger selen som standard det første element, det støder på med det pågældende klassenavn. I kodestykket nedenfor finder den det første element, som er fornavnet:
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class ClassNameLocator {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        
        driver.manage().window().maximize();
        
        //Opening the linkedin sign up home page
        driver.get("https://www.linkedin.com/start/join");
        
        //Locating by firstname via class name 
        driver.findElement(By.className("cell-body-textinput")).sendKeys("Sadhvi");
        
                
        //closing the driver
        driver.quit();
        
        

    }

}

Bemærk:Tag et kig på klassenavnet, som i dette tilfælde er cell-body-textinput, da det ikke er markeret med mellemrum, og derfor betragtes det som en enkelt klasse.

  • Placering af de forskellige elementer med det samme klassenavn ved hjælp af indeks. Det refererede uddrag nedenfor:
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ClassNameLocator {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        
        driver.manage().window().maximize();
        
        //Opening the air bnb home page
        driver.get("https://www.linkedin.com/start/join");
        
        //Locating by firstname via class name 
        List<webelement> signUpForm=driver.findElements(By.className("cell-body-textinput"));
        
        //finding the number of elments with the same class name
        int size=signUpForm.size();
        
        System.out.print(size);
        
        //locating the first name locator
        signUpForm.get(0).sendKeys("Sadhvi");
        
        //locating the last name locator
        signUpForm.get(1).sendKeys("Singh");


        //locating the email  locator
        signUpForm.get(2).sendKeys("[email protected]");
        
        //locating the password  locator
        signUpForm.get(3).sendKeys("password");
                
        
        //closing the driver
        //driver.quit();
        
        

    }

}

</webelement>

Konsoloutput:

Bingo, du er god til at gå nu. Det hele handlede om at finde klassenavne i Selenium.

Hvad lærte vi om Class Name Locator i Selen?

Nå, det var alt for dagens Selenium Java-tutorial til CSS-locator i Selenium. Jeg er sikker på, at du langtfra har udviklet en dyb forståelse af, hvordan du kan bruge klassenavnsfinderen i Selen effektivt. Vi stødte på den mest almindelige fejl i implementeringen af ​​Class name locator i Selenium. Vi lærte også, hvordan man overvinder komplicerede scenarier, hvor flere elementer deler et lignende klassenavn. Adios, god test!

Java tag