Selenium Java教程– Selenium中的类名定位器

本文介绍了Selenium中类名定位器的使用,包括入门示例、处理常见异常,如当元素有多个类或多个元素共享同一类名时的定位策略。还提供了具体代码示例,帮助读者理解如何有效利用类名定位器进行网页元素定位。
摘要由CSDN通过智能技术生成

Selenium中CSS Locator是编写脚本的最重要方面之一。 如果您无法通过使用Selenium中的任何CSS定位器来定位元素,那么精通Selenium自动化将是一项艰巨的任务。 Selenium提供多种定位元素的方法。

您可以查看有关Selenium中不同CSS定位器的其他文章,这些文章可通过多种方式帮助您定位元素:

如果您是Selenium Java的高级或中级实践者,那么可以喜欢上面提到的专门文章。 我写了完整的指南来帮助您说明Selenium中CSS定位器的实际演示。

查看Selenium WebDriver中每个CSS定位器的完整指南,并附带示例

在本Selenium Java教程中,我将参考Selenium中的类名定位器,以演示如何通过类名在网页上定位元素。

Selenium中的类名定位器入门与示例

类名定位器

为了在Selenium中使用类名定位器,我们需要使用以下语法:findElement(By.className("_up0kwni "))

现在,让我们看一下在定位器中按“类名”查找元素的代码:

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();
        
        

    }


}

很简单,不是吗? 在本Java Selenium教程的下一部分中,我们将学习如何处理Selenium中的类名定位器的常见异常。

Selenium中类名定位器的最常见异常之一

在Selenium中使用类名称定位器时,您可能会遇到的另一个有趣的事实和一个普遍的错误是:

类名定位器

我敢肯定,您可能遇到了此错误。 让我们尝试在Facebook注册页面的以下代码片段中纳入此方案。 以下是Facebook“名字”字段的DOM结构,其类别名称属性在下面突出显示:

类名定位器

引用的代码段,尝试使用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();
        
        

    }

}

下面引用了控制台错误:

类名定位器

如何处理这个错误? 好吧,Selenium将此视为复合类,这意味着通过空格标记了多个类。 因此,任何带有空格的类名称都将被视为两个或三个或更多类。

在这种情况下,标记为“输入文本_58mg _5dba _2ph-”的此类名称包含三个空格,从而使其成为三个不同的类别。 因此, Selenium提到了错误,指出它无法一起找到多个类。 在这种情况下,您可以选择使用Selenium中CSS选择器或使用Selenium中XPath使用类名attribute来定位元素。 下面的参考代码段:

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();
        
        

    }

}

当多个元素共享同一个类名时,如何定位一个元素?

现在,您知道何时使用类名以及何时不能使用类名。 但是,您有没有想过当多个元素共享同一个类名时的情况? 您如何应对这种情况? 这又是一回事,您只需使用findElements关键字即可实现。 您需要做的就是,使用findElements关键字找到具有该类名称的所有元素,然后通过索引遍历所需的元素类名称。 话虽如此,我宁愿建议您寻找替代该元素的替代方法。 由于其断裂的趋势会很高,并可能导致错误。

Selenium中具有相似类名的多个元素的类名定位器示例

让我们考虑下面的示例,重点介绍上面的场景。 在这种情况下,我们考虑使用LinkedIn注册页面,其中所有字段共享相同的类名。 在这种情况下,我们需要注意两个重要事项:

  • 如果否,则定义索引,然后默认情况下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 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();
        
        

    }

}

注意:请查看类名称,在本例中为cell-body-textinput,因为它没有标记空格,因此被视为单个类。

  • 使用索引查找具有相同类名的不同元素。 下面的参考代码段:
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("sadhvisingh24@gmail.com");
        
        //locating the password  locator
        signUpForm.get(3).sendKeys("password");
                
        
        //closing the driver
        //driver.quit();
        
        

    }

}

</webelement>

控制台输出:

类名定位器

宾果,你现在走了。 这都是关于Selenium中的类名定位器的。

我们从Selenium中学到了什么名字?

好了,这就是今天针对Selenium中CSS定位器的Selenium Java教程的全部内容。 我相信到目前为止,您已经对如何有效使用Selenium中的类名定位器有了深入的了解。 我们在Selenium中实现类名定位器时遇到了最常见的错误。 我们还学习了如何克服多个元素共享相似类名的复杂情况。 Adios,测试愉快!

翻译自: https://www.javacodegeeks.com/2019/06/selenium-java-tutorial-class-name-locator-selenium.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值