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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ floor、ceil、round函数的区别

函数解释 floor函数&#xff0c;向下取整。即向负无穷方向取离传入参数最近的整数ceil函数&#xff0c;向上取整。即向正无穷方向取离传入参数最近的整数round函数&#xff0c;四舍五入。 头文件 C语言&#xff1a;math.hC: cmath 函数原型 double floor(double)double ce…

C++ 函数参数3种传值方式(以交换两个数为例)

简介 在C中&#xff0c;函数参数的传值方式有传值调用、指针调用和引用调用。接下来&#xff0c;通过一个实例来演示三者区别。 代码 #include <iostream>using namespace std; //传值调用 void Swap(int a,int b) {int tempa;ab;btemp; } //指针调用 void Swap2(int…

Ubuntu系统中利用Sublime分别运行Python与Python3

背景 两台Ubuntu系统的电脑均使用Sublime&#xff0c;运行相同的代码&#xff0c;出现不同的效果。 经观察&#xff0c;一个Sublime python F5 编译采用的为python3&#xff0c;另一个采用的为python2&#xff08;通过两个版本的print函数不同观察&#xff0c;一个print&…

AWS Lambda事件源映射:使您的触发器混乱无序

最近&#xff0c;我们为Sigma Cloud IDE上的无服务器项目引入了两个新的AWS Lambda事件源&#xff08;触发类型&#xff09;&#xff1a; SQS队列和DynamoDB流 。 &#xff08;是的&#xff0c;AWS在几个月前就向他们介绍了&#xff1b;但是我们仍然是一个很小的团队&#xff0…

java 并发计数器_Java 8 LongAdders:管理并发计数器的正确方法

java 并发计数器我只是买了新玩具&#xff0c;而Java 8有很多 。 这次我想谈谈我的最爱之一-并发加法器。 这是一组新的类&#xff0c;用于管理由多个线程编写和读取的计数器。 新的API有望显着提高性能&#xff0c;同时仍使事情简单明了。 自从多核体系结构问世以来人们一直在…

数独 -- 合法数独与完全数独

一、数独的介绍 从2004年底开始&#xff0c;数独游戏在英国变得非常流行。数独(Sudoku)是一个日语单词意思是数字位置之类的单词(或短语)。谜题的理念非常简单;面对一个9 9的网格&#xff0c;被分成9个3 3的块: 在其中的一些盒子里&#xff0c;设置者放一些数字1-9:求解者的目…

程序包无效:“CRX_HEADER_INVALID“

版权声明&#xff1a;本文为博主转载文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 转载本文链接&#xff1a;https://blog.csdn.net/qq_41973208/article/details/89431020 之前在安装谷歌插件的时候遇到的问题&#xff0c;解决…

pat 乙级 1027 打印沙漏(C++)

题目 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减到1&#x…

chrome 占用大量内存直到网页崩溃_Chrome吃内存太夸张!几招解决Chrome占内存硬伤...

我们知道Chrome是非常出色的浏览器&#xff0c;无论从性能还是功能的角度来看&#xff0c;都是如此。但是Chrome在内存占用方面的表现&#xff0c;就很令人头疼了&#xff01;常常听到有朋友抱怨&#xff0c;想要上网找找素材&#xff0c;不一会儿发现Chrome已经将PS要用的内存…

windows和ubuntu双系统设置开机默认系统

1、记住grub界面中windows的位置 我的界面如下&#xff1a;windows在第3行 2、选择进入ubuntu系统 3、打开终端&#xff0c;输入如下命令 sudo vim /etc/default/grub 4、看到如下图的内容 GRUB_DEFAULT是开机启动的默认项&#xff08;我的windows是第3行&#xff0c;所以此…

jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成

jenkins jboss最近&#xff0c;我正在整理一个快速启动的Maven项目&#xff0c;以展示组织JBoss Fuse项目的可能方法。 该项目可以在Github上找到&#xff1a; https : //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯罗林斯 &#xff08; James Rawlings&#xff09…

完全禁用Microsoft Compatibility Telemetry

完全禁用Microsoft Compatibility Telemetry Win S 中搜索 任务计划程序 /Microsoft/Windows/Application Experience 禁用 Microsoft Compatibility Appraiser 如果不管用 服务里禁用 Diagnostic Policy Service

第19次csp认证 202006-2 稀疏向量(C++)

题目 分析 本题需要计算的是两个n维向量的内积&#xff0c;只需计算两者对应的稀疏向量index相同的分量乘积&#xff0c;然后累加就可以了。 向量的一个分量包含index和value&#xff0c;使用struct来存储比较方便。n<109&#xff0c;a,b<5 * 105&#xff0c;|ui| * |v…

解决Windows 10 CPU占用高风扇吵问题

很多笔记本用户在升级到Windows 10后&#xff0c;都遇到了这样一个问题&#xff0c;那就是Windows 10的CPU占用明显高于Windows 7。这个问题对于台式机可能还算不了什么&#xff0c;顶多就是偶尔卡一下罢了。可由于笔记本大多采用变速风扇&#xff0c;CPU温度飙高时&#xff0c…

知识图谱 图数据库 推理_图数据库的知识表示与推理

知识图谱 图数据库 推理图形数据库及其技术生态系统可以为知识表示和推理问题提供优雅&#xff0c;有效的解决方案。 要了解这种说法&#xff0c;我们必须首先了解什么是图形。 图是一种数据结构。 图数据结构的类型很多&#xff0c;但出于本文的目的&#xff0c;我们将重点介绍…

java状态模式和策略模式_Java状态和策略设计模式之间的差异

java状态模式和策略模式为了在Core Java应用程序中正确使用状态和策略设计模式&#xff0c;对于Java开发人员清楚地了解它们之间的区别很重要。 尽管状态和策略设计模式的结构相似&#xff0c;并且都基于开放式封闭设计原则&#xff0c;从SOLID设计原则表示为“ O”&#xff0c…

正斜杠/和反斜杠\的区别

近来研究源码时发现&#xff0c;常常在路径中出现正斜杠“/”和反斜杠“\”&#xff0c;之前就一直不胜其扰&#xff0c;所幸查资料把它一次弄懂&#xff0c;求个明白。在这里做个记录。 我认真搜了一下&#xff0c;发现问这个问题的人还不少&#xff0c;知乎上也有提问的。来…

如何将Java对象转换为JSON字符串

当学习如何编写基于Java的软件时&#xff0c;开发人员遇到的第一个障碍就是如何将其代码与其他软件连接。 这通常是JSON的来源。尽管您可能是Java向导&#xff0c;但JSON是另一种动物。 无论如何&#xff0c;这篇博客文章解释了完成工作所需的一切。 Java对象是数据和处理可用…

C++迭代器(Iterator)详解

迭代器&#xff08;Iterator&#xff09;的介绍 背景&#xff1a; 指针可以用来遍历存储空间连续的数据结构&#xff0c;但是对于存储空间费连续的&#xff0c;就需要寻找一个行为类似指针的类&#xff0c;来对非数组的数据结构进行遍历。定义&#xff1a;迭代器是一种检查容器…

Java中的责任链设计模式

在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 “责任链”设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c;如果处理程序无…