软件测试-----XPath、CSS定位_紫楠&馨芷的博客-程序员秘密

技术标签: 软件测试  

XPath、CSS定位

1. 什么是Xpath?

1. XPath即为XML Path 的简称,它是一种用来确定XML/HTML文档中某部分位置的语言。
2. HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素。

Xpath用途:
基于HTML文档结构使用XPath进行元素定位
提示:Xpath为强大的语言,那是因为它有非常灵活定位策略;

2.Xpath定位策略(方式)

1. 路径-定位
    1). 绝对路径
    2). 相对路径 
2. 利用元素属性-定位
3. 层级与属性结合-定位
4. 属性与逻辑结合-定位

Xpath定位 方法

driver.find_element_by_xpath()

2.1 路径(绝对路径、相对路径)

绝对路径:从最外层元素到指定元素之间所有经过元素层级路径 ;如:/html/body/div/p[2]
          提示:
              1). 绝对路径以/开始
              2). 使用Firebug可以快速生成,元素XPath绝对路径

相对路径:从第一个符合条件元素开始(一般配合属性来区分);如://input[@id='kw']
          提示:
              1). 相对路径以//开始
              2). 使用Friebug扩展插件FirePaht可快速生成,元素相对路径

2.2 利用元素属性

说明:快速定位元素,利用元素唯一属性;
示例://*[@id=‘userA’]

2.3 层级与属性结合

说明:要找的元素没有属性,但是它的父级有;
示例://*[@id=‘p1’]/input

2.4 属性与逻辑结合

说明:解决元素之间个相同属性重名问题
示例://*[@id=‘telA’ and @class=‘telA’]

2.5 Xpath-延伸

//*[text()="xxx"]                            文本内容是xxx的元素

//*[starts-with(@attribute,'xxx')]                属性以xxx开头的元素

//*[contains(@attribute,'Sxxx')]                属性中含有xxx的元素

3. CSS定位

3.1 什么是CSS?

CSS 中选择器是一种模式,用于选择需要添加样式的元素。计算机能够通过CSS选择器定位到相应元素,我们在编写自动化测试脚本时是在不断地找到CSS选择器对应的元素。
CSS中通过各种选择器选择不同的页面元素,完成了颜色、字体、宽高等的设定,既然可以通过CSS选择器完成元素选择及样式设定,则也可利用CSS选择器的规则完成自动化测试脚本中的元素定位。

1. CSS(Cascading Style Sheets)是一种语言,它用来描述HTML和XML的元素显示样式;
   (css语言书写两个格式:
                           1. 写在HTML语言中<style type="text/css">...    
                           2. 写在单独文件中 后缀.css
       )
2. 而在CSS语言中有CSS选择器(不同的策略选择元素),在Selenium中也可以使用这种选择器;
提示:
    1. 在selenium中极力推荐CSS定位,因为它比XPath定位速度要快
    2. css选择器语法非常强大,在这里我们只学习在测试中常用的几个

CSS定位 方法

driver.find_element_by_css_selector()

3.2 CSS定位常用策略 (方式)
1. id选择器
2. class选择器
3. 元素选择器
4. 属性选择器
5. 层级选择器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 CSS总结

在这里插入图片描述

4. XPath与CSS类似功能对比

在这里插入图片描述

5. 八种元素定位总结:

在这里插入图片描述

6.1 导入By类

导包:from selenium.webdriver.common.by import By

6.2 By类的方法

方法:find_element(By.ID,"userA") 
      备注:需要两个参数,第一个参数为定位的类型由By提供,第二个参数为定位的具体方式
示例:
    1. driver.find_element(By.CSS_SELECTOR,'#kw').send_keys("python")
    2. driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('python')
    3. driver.find_element(By.ID,"kw").send_keys("python")
    4. driver.find_element(By.NAME,"用户名标签name属性值").send_keys("123456")
    5. driver.find_element(By.CLASS_NAME,"用户名标签class属性值").send_keys("18611111111")
    6. driver.find_element(By.TAG_NAME,'input').send_keys("python")
    7. driver.find_element(By.LINK_TEXT,'hao123').click()
    8. driver.find_element(By.PARTIAL_LINK_TEXT,'hao').click()

6.3 find_element_by_xxx()和find_element() 区别

说明:通过查看find_element_by_id底层实现方法,发现底层也是调用的By类方法进行的封装;

    def find_element_by_id(self, id_):
    """Finds an element by id.

    :Args:
     - id\_ - The id of the element to be found.

    :Usage:
        driver.find_element_by_id('foo')
    """
    return self.find_element(by=By.ID, value=id_)

总结:虽然方法一样,但WebDriver推荐 find_element_by_xxx()这种方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43475097/article/details/84303671

智能推荐

mysql第二次作业_yiyezhiqiuyyds的博客-程序员秘密

输入 create table teacher( -&gt; no char(4) comment"教师号" primary key, -&gt; name varchar(10) comment"教师姓名" not null, -&gt; prof varchar(20) comment"职称" not null default"助教", -&gt; sal int(2) comment"工资"not null, -&gt; comm smallint(2) com...

王伟峰:谈《啪啪三国》立项开发运营_chenluwolf的博客-程序员秘密

http://www.unitymanual.com/forum.php?mod=viewthread&tid=15287&highlight=%E4%B8%89%E5%9B%BD

用c语言写电池电量检测并显示在lcd1602上面_三更寒天的博客-程序员秘密

c语言实现电池电量检测并显示在LCD1602上,主要需要以下步骤:获取电池电压数据通过ADC(模数转换器)将电压数据转换为数字计算电池电量并对其进行显示将计算结果通过LCD1602控制器传输到LCD显示屏代码实现可能需要依赖于所使用的微控制器,电路板以及LCD控制器的类型和驱动程序。以下是一个简单的示例代码:#include &lt;stdio.h&gt;#include &l...

小程序地图标记点切换问题_小程序map 标记点点击换图_zlx_2018的博客-程序员秘密

今天又遇到了一个问题,困扰了我一上午。问题点: 项目中用到了地图组件,需要有一批标记点,并且可以来回切换并且点击可以显示气泡,但是在切换一批标记点之后,点击某个标记点,就报错了,错误问题也让我摸不着头脑。解决方案: 经过一个上午的摸索,最终发现可能是版本库太低的原因,我现在用到的是2.12.1的基础库,改成2.13.2之后这个问题就没了,真是让人哭笑不得,顺便记录一下使用map的过程吧~错误提示wxml&lt;map id="map" latitude="{{latitude}}" lo

android layout_weight的使用详解_layoutweight怎么用_一个努力学习的程序员的博客-程序员秘密

一直没理解在LinearLayout中的layout_weight属性的意义,使用的时候都是将子控件的layout_width或者layout_height设置为0,然后在设置layout_weight的权重值,以至于在被问到如果设置了layout_width为具体的值时对layout_weight的影响时一脸懵逼。然后看到了这篇文章,终于豁然开朗。原来layout_weight属性的意义就是将父控件的剩余空间按照设置的权重比例再分配,也就是在布局的时候,系统先按照view的layout_width和la

UVaOJ 10815 - Andy's First Dictionary_Ra_WinDing的博客-程序员秘密

AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 1. Elementary Problem Solving :: StringDescription8岁的小 Andy 想要自己写一本字典,但是他认识的字不太多。于是他就将他最喜欢的一个故事里面的单词,整理成一本字典。单个或多个连续的字母算

随便推点

Logtail+lognet4+阿里云日志服务_程序员-老王的博客-程序员秘密

阿里云提供的有日志服务计算查询检索,比较适合没有搭建出自己日志系统的项目。优点:日志计算查询速度快稳定缺点:日志量大,生成的文件txt文件多可能会采集不到1.下载Logtail及安装,用于阿里云采集系统的日志教程:https://help.aliyun.com/document_detail/72561.html?spm=a2c4g.11174283.3.2.545d1caa3x5D36https://help.aliyun.com/document_detail/49006.h..

tomcat和weblogic设置编码方式_weixin_34014277的博客-程序员秘密

tomcat设置server.xml中的Connector,加入URIEncoding="UTF-8"&lt;ConnectorURIEncoding="UTF-8"connectionTimeout="20000"port="80"protocol="HTTP/1.1"redirectPort="8443"/&gt;weblogic第一种方法在web.xml中增加...

一起谈.NET技术,HTTP协议及POST与GET操作差异,C#中如何使用POST、GET等_weixin_34161083的博客-程序员秘密

引言HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来。但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态有哪些?以及在C#中你如何使用?如果你不能清楚地回答其中的大部分问题,那么这篇文章就是为你准备的!大纲如下: 1、HTTP概述1.1、HTTP协议的客户端与服务器的交互1.2、HTTP消息...

【测试】用例设计思路-六方面_设计测试用例思路_cacho_37967865的博客-程序员秘密

有这样一个面试题:在一个Web测试页面上,有一个输入框,一个计数器(count)按钮,用于计算一个文本字符串中字母a出现的个数。请设计一系列测试用例用以测试这个Web页面。有经验的测试人员可能会问面试官,字母a区分大小写吗?只统计英文字母的a吗?最长输入字符是多少,最少输入字符是多少?对输入的字符类型是否有限制,是否会自动清除不符合要求的字符?所以第一步应该是明确需求,然后我们才开始进行思...

c语言课程设计题目总汇,C语言课程设计题目_铑慇獬廌的博客-程序员秘密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼18、学生管理系统(限最多2人完成)使用下面的数据,用C设计一个简单的学籍管理系统,实现出最基本的功能。学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成学号 姓名 性别 宿舍号码 电话号码01 张成成 男 501 8773211102 李成华 女...

推荐文章

热门文章

相关标签