热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java+Selenium3自动化入门7八种定位方式1

今天就来说说selenium的八种定位方式,八种定位方式基本上可以解决我们自动化测试中定位的绝大部分问题,当然,如果出现定位不到或者元素属

今天就来说说selenium的八种定位方式,八种定位方式基本上可以解决我们自动化测试中定位的绝大部分问题,当然,如果出现定位不到或者元素属性不可见,这就需要我们了解更多的前端知识,通过操作Frame,Dom或者Javascript来解决。

首先WebDriver提供的两个API具有查找元素的能力;

1.  

2. 八种定位当时都封装在By类中

那今天我们就先来看看有哪八种基本的定位方式呢?

1.通过-id来定位元素,html中的id属性一般用来唯一标记一个元素,换句话说,一个元素的id在一个网页中应该是唯一的。

    我们以百度为例,通过-id来定位他的搜索框,利用fireBug我们可以看到他的id="kw",所以我们可以通过代码来看一下。

public class EightMthods {public static void main(String[] args) throws Exception { WebDriver driver = new FirefoxDriver(); driver.manage().window().maximize();/**1. 根绝id来定位元素 */String Url = "https://www.baidu.com";driver.get(Url); //输入框driver.findElement(By.id("kw")).sendKeys("you are beautiful");driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);//百度一下按钮driver.findElement(By.id("su")).click();

大家可以运行一下,看看效果吧,但是前提是你的selenium版本要和FireFox或者你的Chrome版本匹配哦

2.通过-xpath来定位,我们还是以百度首页来举个栗子。。。

   通过F12,我们可以看到输入框的位置 xpath = ".//*[@id='kw']"    ,今天这里先不说xpath的构造,之后我会专门写一篇相关的文章介绍,xpath还有一个很好的功能就是他可以debug,比如我们在xpath定位栏输入 xpath  =  .//*[@class='s_ipt']   ,然后点回车,这个时候如果这个xpath是有效的,那么他就会根据xpath路径去定位到相关的元素,如下图

如果xpath格式错误,那么他会是显示红色的,如下图

如果xpath路径错误,那么他会找不到页面元素的信息

ok,那我们来看一下代码如何实现的

public class EightMthods {public static void main(String[] args) throws Exception { WebDriver driver = new FirefoxDriver(); driver.manage().window().maximize();/**1. 根绝xpath来定位元素 */String PhotoUrl = "https://www.baidu.com";driver.get(PhotoUrl); //通过xpath定位driver.findElement(By.xpath(".//*[@id='kw']")).sendKeys("Lions"); driver.findElement(By.xpath(".//*[@id='su']")).click();

下面我在介绍几个xpath的其他写法

/** xpath--text()方法,百度首页的新闻链接*/driver.findElement(By.xpath(".//*[@id='u_sp']/a[text()='新闻']")).click();/** 对于动态的元素定位,可以使用contains()*///eg 百度首页的【新闻元素】driver.findElement(By.xpath(".//*/a[contains(@href,'news')]")).click();/** xpath相对路径的写法* URL=http://news.baidu.com/* 先根据for = newstitle 或者text()=新闻标题来定位“新闻标题”这个标签。 *///使用for属性来定位driver.findElement(By.xpath(".//*/label[@for='newstitle']/../input[@id='newstitle']")).click();//使用text来定位driver.findElement(By.xpath(".//*/label[text()='新闻标题']/../input[@id='newstitle']")).click();

3.PartialLinkText(String partialLinkText)方法定位,超链接部分文本,基于LinkText (String linkText )-超链接完整文本,不想写那么多的字的时候,选取其中的一部分字段,但是必须在该页面有唯一性, 一般我会选择使用LinkText()方法

public class EightMthods {public static void main(String[] args) throws Exception { WebDriver driver = new FirefoxDriver(); driver.manage().window().maximize();/**1. 根绝linkText&partialLinkText来定位元素 */String PhotoUrl = "http://photo.163.com";driver.get(PhotoUrl); //通过xpath定位/**使用下面这段代码请把地址更换为百度首页地址*driver.findElement(By.linkText("把百度设为主页")).click();*/WebElement LearnMoreLink = driver.findElement(By.partialLinkText("了解更多"));//点击了解更多LearnMoreLink.click();

4.用样式选择器定位cssSelector (String cssSelector),css即层叠样式表,通过 css可以描述标签的样式,如字体的大小,颜色,标签布局,间距等, 样式选择器是一种非常使用又容易被开发者忽略的定位方式。

如百度首页的输入框元素,用#id的值表示这个元素的css表达式

public class EightMthods {public static void main(String[] args) throws Exception { //首先要创建一个driver驱动的实例对象,这里用Firefox浏览器来演示WebDriver driver = new FirefoxDriver(); driver.manage().window().maximize();/**1. 根绝cssSelector来定位元素 */String PhotoUrl = "https://www.baidu.com";driver.get(PhotoUrl); //通过iddriver.findElement(By.cssSelector("#kw")).sendKeys("For beauty");//By.cssSelector("标签名#id")//如百度输入框:By.cssSelector("input#kw"));//通过className(样式名)方式 By.cssSelector(".className");//如百度输入框: By.cssSelector(".s_ipt");//By.cssSelector("标签名.className") ;//如百度输入框:By.cssSelector("input.s_ipt");//通过元素属性,语法:By.cssSelector("标签名[属性名1 = '属性值'][属性名2 = '属性值']") 可以是多属性也可以是单属性,非常实用。//By.cssSelector("input[value='255'][autocomplete ='off']")//By.cssSelector(input[autocomplete='off'])driver.findElement(By.cssSelector("#su")).click();

如果感觉自己写的不准确的话,可以使用Firepath,切换为CSS选择器就ok了

 

 

 


推荐阅读
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
author-avatar
哒Dayling玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有