学习总结——Selenium元素定位

读一本好书,不能读读就算了,做一下总结,变成自己的,以备查阅。

1.         driver.findElement(By.id(<element ID>))

ID是独一无二的,使用ID定位是最为推荐的方法。

但是:1.不是所有元素都会指定ID;2.有的ID属性的值是动态生成的。

2.         driver.findElement(By.name(<element name>))

name属性不一定唯一,如果有多个,第一个出现的会被选择。

3.         driver.findElement(By.className(<element class>))

4.         driver.findElement(By.tagName(<htmltagname>))

tagName()方法是定位 HTML 标记名称:

WebElement table = driver.findElement(By.id("summaryTable"));

List<WebElement> rows = table.findElements(By.tagName("tr"));

assertEquals(10, rows.size());

5.         driver.findElement(By.linkText(<linktext>))

WebElement 类也可以支持查询子类元素。

WebElement topLink = driver.findElement(By.id("div1")).findElement(By.linkText("top"));

6.         driver.findElement(By.partialLinkText(<linktext>))

当元素有部分在变时,可以用部分不变的内容来定位元素。

7.         driver.findElement(By.cssSelector(<cssselector>))

1)         绝对路径如:WebElement userName = driver.findElement(By.cssSelector("html >

         body > div > div > form > input"));

但是,这个策略会有一些的限制,他取决于页面的整个结构。如果有些许改变,选择     器将找不到这个元素。

        相对路径

2)         DOM中第一个<input>元素:WebElement userName = driver.findElement(By.cssSelector("input"));

3)          使用class定位:先指定一个 HTML 的标签,然后加一个“.”符号,跟上 class 属性的值, WebElement loginButton =driver.findElement(By.cssSelector("input.login"));可以找到按钮的<input>标签 class 为 login 的元素。

  使用ID 来定位:先指定一个 HTML 标签,然后加上一个“#”符号,跟上 id 的属性  值,如下所示:

  WebElement userName =driver.findElement(By.cssSelector("input#username"));

         这将会返回 input 标签中 id 为 username 的元素。

  使用name定位:WebElement userName =

  driver.findElement(By.cssSelector("input[name=username]"));

         使用 name 属性来定位元素和直接用 By 类中的 name()方法来定位相似。     

         使用其他的属性定位:WebElement previousButton       driver.findElement(By.cssSelector("img[alt='Previous']"));

4)         使用多个属性来定位<input>元素:WebElement previousButton =driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));

5)         使用属性名称定位元素:List<WebElement> imagesWithAlt =

         driver.findElements(By.cssSelector("img[alt]"));

  not()伪类匹配不满足规则的元素: 例如, 想要定位那些<img>标签中不含有alt属性,

         List<WebElement> imagesWithoutAlt=driver.findElements(By.cssSelector("img:not([alt])"));

6)         部分属性值的匹配:

         input[id^= ' ctrl']:以ctrl开始

         input[id$='_userName']:以_userName结尾

         input[id*='userName']:包含userName

8.         driver.findElement(By.xpath(<xpath queryexpression>))

1)         绝对路径:WebElement userName =driver.findElement(By.xpath("html/body/div/div/form/input"));

         这个策略有局限性,他需要参考整个页面的文档结构。如改变了,此元素的定位将会

         失效。

  相对路径:

2)         DOM中第一个<input>元素:

         WebElement userName = driver.findElement(By.xpath("//input"));

         使用索引来定位元素,第二个<input>

         WebElement passwd = driver.findElement(By.xpath("//input[2]"));

3)         用 ID 属性来定位:

         WebElement userName =driver.findElement(By.xpath("//input[@id='username']"));

  使用 alt 属性来定位:

         WebElement previousButton = driver.findElement(By.xpath("img[@alt='Previous']"));

4)         使用多个属性来定位<input>元素

  • WebElement previousButton =driver.findElement(By.xpath("//input[@type='submit'][@value='Login']"));
  • WebElement previousButton = driver.findElement(By.xpath("//input[@type='submit'and @value='Login']"));
  • WebElement previousButton = driver.findElement(By.xpath("//input[@type='submit'or @value='Login']"));

5)         使用 XPath 及属性名称定位元素:

         List<WebElement> imagesWithAlt = driver.findElements(By.xpath ("img[@alt]"));

6)         部分属性值的匹配:

         input[starts-with(@id,'ctrl')]:id以ctrl开始

         input[ends-with(@id,'_userName')]:id以_userName结束

         Input[contains(@id,'userName')]:id包含userName

7)         使用值来匹配任意属性及元素:

         WebElement userName = driver.findElement(By.xpath("//input[@*='username']"));

8)         使用 XPath 轴来定位元素:用到再研究。

 

总结提示:

  1. 使用 id,name 或 class 属性是定位元素的首选方法。
  2. CSS 选择器和 XPath 在 Selenium 用户中非常流行,但是 CSS 选择器相比 XPath 从难易、速度、效率来说更为推荐大家使用。
  3. XPath 的查询慢于CSS 选择器,因为 XPath支持双向的查询。可以通过元素的父,兄弟,子节点来定位元素。

转载于:https://www.cnblogs.com/lucy-lily/p/5158144.html

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

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

相关文章

open ssl里面的自定义get***函数失效

1 问题 在open ssl加载引起里面部分我自己写了一个get和set方法,然后我在其它地方调用使用了Info类型的声明 extern Info info; 先初始化info,然后 info->setA(&info, value); char value[100]; 但是我立马 info->getA(&info, value, sizeof(value)); LOGI(…

计算机在现代商业中的作用,现代商业中计算机web数据挖掘技术的应用

[摘 要] 随着科技水平的不断提高&#xff0c;各种高科技设备辅助互联网将数字化、信息化的方法和手段运用到了各行各业之中&#xff0c;尤其在现代商业中&#xff0c;国际化、全球化的市场规模使得信息的处理工作极为庞大&#xff0c;需要更多的依赖计算机技术来完成。Web数据挖…

八种状态增加测试用例状态的精确度

一般在工作中记录测试用例状态用到三种状态&#xff1a;通过&#xff08;Pass&#xff09;&#xff0c;失败&#xff08;Fail&#xff09;和排队等待中&#xff08;In Queue&#xff09;。但是我倾向与更准确地表示一个一般测试用例的生命周期&#xff0c;尽管你的测试的周期会…

怎么找到项目中所有同名的类_26岁转行程序员的成长历程--Day03从内存层面理解类和对象...

今天学习了类、对象及相关知识&#xff0c;试着从内存角度分析三者关系&#xff0c;如果有不对的地方请指正首先得先介绍java中的三个内存区域&#xff1a;栈区用于存放该线程执行方法的信息&#xff08;实际参数、局部变量等&#xff09;。栈属于线程私有&#xff0c;不能实现…

pycharm提示your evalluation license has expired解决方法

安装pycharm&#xff0c;一段时间后提示your evalluation license has expired&#xff1a;打开pycharm--点击help--register--选中license server,输入license server address如图示即可 转载于:https://www.cnblogs.com/youtiaoge/p/7125070.html

【SPSS统计分析】SPSS聚类分析:一个案例演示聚类分析全过程(附SPSS 19.0中文版下载)

摘要:案例数据源: 有20种12盎司啤酒成分和价格的数据,变量包括啤酒名称、热量、钠含量、酒精含量、价格。数据来自《SPSS for Windows 统计分析》。 目 录 问题一:选择那些变量进行聚类?——采用“R型聚类

python利用特征进行可视化样本显示_利用Python进行机器学习之特征选择

毫无疑问&#xff0c;解决一个问题最重要的是恰当选取特征、甚至创造特征的能力&#xff0c;这叫做特征选取和特征工程。对于特征选取工作&#xff0c;我个人认为分为两个方面&#xff1a;1)利用python中已有的算法进行特征选取。2)人为分析各个变量特征与目标值之间的关系&…

poj 2886 Who Gets the Most Candies?(线段树)

题目链接&#xff1a;poj 2886 Who Gets the Most Candies?题目大意&#xff1a;N个人围成一圈玩约瑟夫环游戏&#xff0c;不同的是。步长不固定&#xff0c;由前一个出局的人决定。给定K表示起始的人。第i个淘汰的人将获得g(i)个糖果&#xff0c;问说谁获得的糖果最多。g(x)为…

linux c之动态打开链接库(dlopen dlsym dlclose)

1 linux提供了加载和处理动态链接库的系统调用 2 主要函数 1) dlopen、 dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,打开模式如下: RTLD_LAZY 暂缓决定,等有需要时再解出符号 RTLD_NOW 立即决定,返回前解除所有未决定的符号。 2) dlsym、 …

甘肃2019年9月计算机二级报名入口,2019年9月甘肃计算机二级考试成绩查询入口...

【摘要】2019年9月份计算机二级考试已经圆满结束&#xff0c;参加考试的小伙伴们已经迫不及待的想要知道成绩了吧&#xff0c;小编对2019年9月甘肃计算机二级考试成绩查询入口进行了整理&#xff0c;参加9月份考试的朋友们到时候记得按时查询成绩哦&#xff01;想要了解更多计算…

FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库

简介FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库从 .NET 和 .NET Core 发送电子邮件的最简单方法。将 Razor 用于电子邮件模板并使用 SendGrid、MailGun、SMTP 等进行发送Nuget包•FluentEmail.Core - 域模型•FluentEmail.Smtp - 通过 SMTP 服务器发送电子邮件•Flu…

基于GLT法的风云三号气象卫星校正

GLT几何校正法利用输入的几何文件生成一个地理位置查找表文件(geographic lookup table,GLT),从该文件中可以了解到某个初始像元在最终输出结果中实际的地理位置。地理位置查找表文件是一个二维图像文件,文件中所包含两个波段:地理校正图像的行和列,文件对应的灰度值表示…

安装MySql出现Error Nr.1045的解决办法

如图&#xff0c;最后一步出现这个错误框 这是因为上次安装过MySql&#xff0c;其用户数据在卸载的时候没有被删除掉&#xff0c;解决办法如下&#xff1a; 显示隐藏的文件夹&#xff0c;打开C盘&#xff0c;找到下图文件删除之 删除之后再安装一遍MySQL&#xff0c;就可以了转…

CentOS下MySQL忘记root密码解决方法【转载】

1&#xff0e;首先确认服务器出于安全的状态&#xff0c;也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间&#xff0c;MySQL数据库完全出于没有密码保护的 状态下&#xff0c;其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对 外…

MYSQL - php 使用 localhost 无法连接数据库

php 使用 localhost 无法连接数据库&#xff0c;而使用127.0.0.1却能连接成功。 可能原因&#xff1a; 系统hosts文件未提供127.0.0.1到localhost的解析。解决方法&#xff08;以win7系统为例&#xff09;&#xff1a;找到C:&#xff3c;Windows&#xff3c;System32&#xff3…

python网易云_用python爬虫爬取网易云音乐

标签&#xff1a; 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去。按键盘F12打开网页调试工具,点击Network就可以查看网络请求的相关信息&#xff0c;选择XHR&#xff0c;然后可以看…

android 固定底部 布局_Android系统列表控件

在android系统控件中&#xff0c;有多个控件可以展示列表数据。一、ListView该组件是android中最常用的一个UI组件&#xff0c;用于实现在屏幕上显示多个内容&#xff0c;以便于我们用手指进行滑动。ListView控件以列表的形式展示具体内容&#xff0c;并且能够根据数据的长度自…

C语言之在结构体里面放很多函数指针

1 原因 看了open ssl代码里面很多在结构体里面放很多函数指针,然后再来调用,这样比较规范和统一 2 代码实现 #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <string.h> #include <pthread.h>typedef struct key_info …

计算机模拟考总结,高职单考单招计算机模拟一技术总结.doc

高职单考单招计算机模拟试卷一一、选择题(30*4分120分)1&#xff0e;从1946年第一台计算机诞生算起&#xff0c;计算机的发展至今经历了(? )4个年代。A.低档计算机、中档计算机、高档计算机、手提计算机B.微型计算机、小型计算机、中型计算机、大型计算机C.电子管计算机、晶体…

.NetCore中IdentityServer使用nginx-proxy的一次排错经历

前言最近在看 Duende.IdentityServer.Admin&#xff0c;本地使用IIS Express跑了一下源码&#xff0c;也看了一遍的代码&#xff0c;决定使用他们的模板创建一个Demo&#xff0c;部署在本地的Docker环境中&#xff0c;也算是踩一下坑吧。以下不会详细介绍项目的部署&#xff0c…