高级自动化测试python+selenium教程手册

——高级讲师肖sir(Harm)

第 2 章8种定位方法

总结:

selenium 的 webdriver 提供了八种基本的元素定位方法,前面六种是通过元素的属性来直接定位的,后面的 xpath 和 css 定位更加灵活,需要重点掌握其中一个。

备注: 加上js 是9种;

  1. 通过 id 定位:find_element_by_id()
  2. 通过 name 定位:find_element_by_name()
  3. 通过 class 定位:find_element_by_class_name()

4.通过 tag 定位:find_element_by_tag_name(

5、通过 link 定位:find_element_by_link_text()

6、通过 partial_link 定位:find_element_by_partial_link_text()

7.通过 xpath 定位:find_element_by_xpath()

8.通过 css 定位:find_element_by_css_selector()

2.1.1 查看页面元素:

以百度搜索框为例,先打开百度1.

  1. 点左下角箭头 点击右上角(...)--更多工具---开发者工具 小圆点 或f12
  1. 讲箭头移动到百度搜索输入框上,输入框高亮状态
  1. 下方红色区域就是单位到输入框的属性:

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxl

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxl ength="100" name="wd">

百度输入框的元素

2.2.1  第一个方法id定位

find_element_by_id()

  1. 从上面定位到的元素属性中,可以看到有个 id 属性:id="kw",这里可以通过它的 id 属性定位到这个元素。

# # id定位  百度输入框的ID属性:id="kw"

  1. 定位到搜索框后,用 send_keys()方法

# # id定位  百度输入框的ID属性:id="kw"

# drvier.find_element_by_id('kw').send_keys('多测师')

 

2.1.2 find_element_by_name()

1.从上面定位到的元素属性中,可以看到有个 name 属性:name="wd", 这里可以通过它的 name 属性单位到这个元素。

说明:这里运行后会报错,说明这个搜索框的 name 属性不是唯一的, 无法通过 name 属性直接定位到输入框

# # name定位:百度输入框的name属性:name="wd"

2.1.3 find_element_by_class_name()

注意点:find-elements_by_class_name   表示很多元素name

返回的是一个列表,有多个name

 

1.从上面定位到的元素属性中,可以看到有个 class 属性:class="s_ipt",这里可以通过它的 class 属性单位到这个元素。

# # # class定位:百度中的class元素class="s_ipt"

2.1.4 link定位    find_element_by_link_text(  ).click  

# # 通过文本点击
# driver.find_element_by_link_text('hao123').click()
# # click()=点击按钮

# # 通过文本点击
# driver.find_element_by_link_text('hao123').click()
# # click()=点击按钮

 l =driver.find_element_by_link_text('hao123')
# l.click()

  1. 定位百度页面上"hao123"这个按钮

<aclass="mnav" target="_blank" href="http://www.hao123.com">hao12 3</a>

  1. 从元素属性可以分析出,有个 href = "http://www.hao123.com

说明它是个超链接,对于这种元素,可以用以下方法

2.1.5 find_element_by_tag_name()

如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。下面代码仅做参考,运行时必定报错

  1. 很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考和理解,运行肯定报错

2.1.6 partial_link定位    find_element_by_partial_link_text()#模糊匹配

1.有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长, 这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了

  1. 如“hao123”,只需输入“ao123”也可以定位到

xpath定位://*[@id="kw"] 这个路径是直接复制的百度输入框的xpath路径
# drvier.find_element_by_xpath('//*[@id="kw"]').send_keys('多测师')
# a =drvier.find_element_by_xpath('//*[@id="kw"]')
# a.send_keys('你好呀!!!')

2.1.7 xpath定位 find_element_by_xpath()

  1. 以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有 id、name、class 属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用 xpath 解决

xpath 是一种路径语言,跟上面的定位原理不太一样

xpath定位://*[@id="kw"] 这个路径是直接复制的百度输入框的xpath路径
# drvier.find_element_by_xpath('//*[@id="kw"]').send_keys('多测师')
# a =drvier.find_element_by_xpath('//*[@id="kw"]')
# a.send_keys('你好呀!!!')

方法:第一步找到定位元素,选定元素,点击右键,copy,copy xpath

2.1.8 find_element_by_css_selector()

#xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解

driver.find_element_by_css_selector('kw').send_keys('selenium')

from selenium import webdriver
from time import sleep

from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
sleep(2)
# 通过CSS定位搜索框,并输入selenium
driver.find_element_by_css_selector('#kw').send_keys('selenium')

拓展:一种javascript定位

# # js语法定位:
# js ='document.getElementById("kw").value="多测师"'
# drvier.execute_script(js)

不是python中自带的,注意区分大小写,js固定格式

# # js语法定位:
# js ='document.getElementById("kw").value="多测师"'
# drvier.execute_script(js)

当页面元素有id属性时,最好尽量用id来定位。

当要定位一组元素相同元素时,可以考虑用tagName或name。

当有链接需要定位时,可以考虑linkText或partialLinkText方式。

xpath定位用的较多,可以直接复制也可以自己写

多测师讲解自动化selenium___定位元素002___高级讲师肖sir的更多相关文章

  1. 多测师讲解自动化_rf框架搭建_高级讲师肖sir

    robot framework:自动化测试框架(简称RF框架) Python3.7 RIDE(可视化界面).  Wxpython  pip(在线下载) . setuptools(在线安装) . 第三方 ...

  2. 多测师讲解自动化 _邮件发送_高级讲师肖sir

    第一步.进入如下网址申请163邮箱. https://mail.163.com/ 第二步.注册完之后登录.点击如下图设置­点击POP3/SMTP/IMAP. 第三步.右侧点击客户端授权密码. 第四步. ...

  3. 多测师讲解RF自动化测试实现流程_高级讲师肖sir

    1.环境搭建过程?­­整套环境需要哪些工具包,以及工具包的作用?因为我搭建的RF框架是基于Python的,所以肯定要先安装Python,python安装完之后,开始安装自动化测试框架rf3.0-在do ...

  4. 多测师讲解html _图片标签003_高级讲师肖sir

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>段 ...

  5. 多测师讲解html _段落标签002_高级讲师肖sir

    <html> <head> <meta charset="UTF-8"> <title>段落标签</title> < ...

  6. 多测师讲解接口测试 _面试题003_高级讲师肖sir

    接口测试 一.你对HTTP有没有了解过?具体讲一下对http的了解.(答题思路: 定义.常见请求类型.状态码.请求头请求体.响应头和响应体.三次握手和四次挥手.)答:了解,我们做接口的时候基本上都是基 ...

  7. 多测师讲解性能测试_面试题_001高级讲师肖sir

    什么叫做性能测试?1. 软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,所以一般来说性能测试介入的时机是在功能测试完成之后.另外,由定义中的及时性可知性能也是一种指标,可以 ...

  8. 多测师讲解接口测试 _理论基础知识001_高级讲师肖sir

    前言: 我们今天进入接口测试的学习! 今天学习的内容是偏向理论 接口理论 了解接口测试(1) 一.什么是接口测试? 接口统称api,即程序与程序之间的对接.交接.交互.是测试系统组件间接口的一种测试. ...

  9. 多测师讲解selenium--常用关键字归纳-_高级讲师肖sir

    常见的定位方式: 1.通过id定位 id=kw 2.通过name定位 name=wd 3.通过xpath相对路径定位:xpath=//*[@id="kw"] 4.通过两个属性值定位 ...

随机推荐

  1. Spring IoC 到底是什么

    前言 「上一篇文章」我们对 Spring 有了初步的认识,而 Spring 全家桶中几乎所有组件都是依赖于 IoC 的. 刚开始听到 IoC,会觉得特别高大上,但其实掰开了很简单. 跟着我的脚步,一文 ...

  2. -webkit-line-clamp下多行文字溢出点点点...

    限制在一个块元素显示的文本的行数. -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 为了实现该 ...

  3. Playbook使用,编写YAML

    YAML是什么? YAML是一个可读性高.用来表达数据序列的格式语言 YAML:YAML Ain't a Markup Language YAML以数据为中心,重点描述数据的关系和结构 YAML的格式 ...

  4. VSM

    好吧,在被这个算法折腾了许多天之后,我终于对它竖起了中指.这几天的经历让我明白了一个道理:对于数学基础不好的人来说,对待图形学最好远观不可亵玩焉:如果坚持硬闯却又碰巧E文不咋地,那受罪程度真叫人生不如 ...

  5. NOIP2017 Day1 T1 小凯的疑惑

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小凯想知道在无法准确支付的物品中,最贵的价 ...

  6. async/await 深度理解使用

    在vue中使用 eg async created () { await setTimeout(()=>{ console.log(1) },5000); }, async mounted () ...

  7. python语句与函数

    赋值语句 : 分支语句 : 函数 :根据输入参数产生不同输出功能 程序的输入与输出 input() 从控制台获得用户输入的函数 使用格式 print()函数 以字符形式向控制台输出结果的函数 字符类型 ...

  8. Envoy 代理中的请求的生命周期

    Envoy 代理中的请求的生命周期 翻译自Envoy官方文档. 目录 Envoy 代理中的请求的生命周期 术语 网络拓扑 配置 高层架构 请求流 总览 1.Listener TCP连接的接收 2.监听 ...

  9. java identityHashCode 和 hashCode

    当类并没有重写Object#hashCode()时, 对于 System.identityHashCode(Object) 和 Object#hashCode() 的结果是一致的; 但对于类似Stri ...

  10. 整合mybatis与spring

    认识mybatis-spring MyBatis-Spring 需要以下版本: . 如果使用 Maven 作为构建工具,仅需要在 pom.xml 中加入以下代码即可: <dependency&g ...