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

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

  • 硒中的链接文本和部分链接文本
  • Selenium中的ID定位器
  • 硒中的名称定位器
  • Selenium中的标记名定位器
  • Selenium中CSS选择器
  • Selenium中的XPath

如果您是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 stubSystem.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 pagedriver.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 fielddriver.findElement(By.className("_1wh4xpp1")).click();//closing the driverdriver.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 stubSystem.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 pagedriver.get("https://www.facebook.com/");//Locating by firstname via class name driver.findElement(By.className("inputtext _58mg _5dba _2ph-")).sendKeys("Sadhvi");//closing the driverdriver.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 stubSystem.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 pagedriver.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 driverdriver.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 stubSystem.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 pagedriver.get("https://www.linkedin.com/start/join");//Locating by firstname via class name driver.findElement(By.className("cell-body-textinput")).sendKeys("Sadhvi");//closing the driverdriver.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 stubSystem.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 pagedriver.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 nameint size=signUpForm.size();System.out.print(size);//locating the first name locatorsignUpForm.get(0).sendKeys("Sadhvi");//locating the last name locatorsignUpForm.get(1).sendKeys("Singh");//locating the email  locatorsignUpForm.get(2).sendKeys("sadhvisingh24@gmail.com");//locating the password  locatorsignUpForm.get(3).sendKeys("password");//closing the driver//driver.quit();}}</webelement>

控制台输出:


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

我们从硒中学到了什么?

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


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

Selenium Java教程– Selenium中的类名定位器相关推荐

  1. return true Java_[Java教程]js中return,return true,return false的用法及区别

    [Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...

  2. java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别

    [Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...

  3. java中分支_[Java教程]JavaScript中的分支结构

    [Java教程]JavaScript中的分支结构 0 2016-06-30 23:03:37 说到JavaScript中的分支结构,我们就不得不提到流程控制这个词,我们所有的程序都是由数据和算法组成的 ...

  4. java中的console是干什么的_[Java教程]javascript中,你真的会用console吗?

    [Java教程]javascript中,你真的会用console吗? 0 2015-08-11 17:00:09 使用console进行性能测试和计算代码运行时间 对于前端开发人员,在开发过程中经常需 ...

  5. 遍历 in java_[Java教程]JavaScript中遍历数组 最好不要使用 for in 遍历

    [Java教程]JavaScript中遍历数组 最好不要使用 for in 遍历 0 2017-01-14 00:01:52 先看一段代码1 2 3 4 5 Document 6 7 8 9 21 2 ...

  6. Java折叠_[Java教程]Jquery中菜单的展开和折叠

    [Java教程]Jquery中菜单的展开和折叠 0 2018-08-15 16:03:38 标签内容 您好:alee 宿舍管理员 密码管理 修改密码 宿舍管理 学生宿舍查询 学生宿舍新增 学生宿舍分配 ...

  7. java 中鼠标事件_[Java教程]js中鼠标事件总结

    [Java教程]js中鼠标事件总结 0 2017-07-11 00:00:19 js中鼠标事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblc ...

  8. java有push方法么_[Java教程]js中push和join方法使用介绍

    [Java教程]js中push和join方法使用介绍 0 2013-10-09 07:00:17 push和join方法想必大家并不陌生吧,在本文将为大家详细介绍下js中的push和join方法的使用 ...

  9. java中字符串和数组如何比较_[Java教程]javascript中数组和字符串的方法比较

    [Java教程]javascript中数组和字符串的方法比较 0 2016-07-19 23:00:05 ×目录[1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的 ...

最新文章

  1. 做好技术管理,你必须要跨越的4道槛
  2. javascript实现的有缩略图功能的幻灯片切换效果
  3. mysql事务实战_MySQL - 实战 (2) - 事务隔离
  4. vue报错vue-router.esm.js?8c4f:2062 Uncaught (in promise) Error: Avoided redundant navigation to curren
  5. java scanner_Java Scanner radix()方法与示例
  6. java oracle数据库高效分页查询_Oracle学习之分页查询数据
  7. Java instanceof用法
  8. 迅捷PDF转换器特点和使用步骤
  9. 信息与网络安全 Diffie-Hellman密匙交换算法 题目练习
  10. 16进制颜色代码对照表
  11. 树莓派——8、树莓派博通BCM2835芯片手册导读
  12. sign-file: certs/signing_key.pem: 解决方法
  13. 人力资源年终数据分析报告怎么写?这份攻略拿走不谢
  14. 你知道吗?重逢是为了下次更好的相遇
  15. 所见即所得的3D打印建模设计
  16. 不要告诉我你懂margin
  17. UltraISO 制作U盘镜像步骤
  18. 《Hadoop权威指南》学习笔记(一)
  19. 如何删掉讨厌的企业qq的小尾巴-金山安全助手
  20. StarRocks携手零洞科技,助力碧桂园物业企业微信数字化项目

热门文章

  1. P2947-[USACO09MAR]向右看齐Look Up【单调栈】
  2. jzoj1373-食物链【并查集】
  3. codeforces1301 F. Super Jaber(多源bfs+枚举)
  4. 【数学】礼物(jzoj 2129)
  5. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
  6. 操作系统复习笔记 02-03 OS Structure 操作系统结构
  7. Tengine-Ngnix高级版
  8. 使用ueditor实现多图片上传案例——Dao层(BaseDao)
  9. 判断个十百千位之后是否大于20 java——CSDN博客
  10. Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)