高级自动化测试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. Agumaster添加股票日交易爬虫画面

  2. 2020重新出发,NOSQL,MongoDB分布式集群架构

    MongoDB分布式集群架构 看到这里相信你已经掌握了 MongoDB 的大部分基本知识,现在在单机环境下操作 MongoDB 已经不存在问题,但是单机环境只适合学习和开发测试,在实际的生产环境中,M ...

  3. Serverless 初体验:快速开发与部署一个Hello World(Java版)

    昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...

  4. yum安装软件包提示Error Downloading Packages解决方法

    在执行yum upgrade时报错 解决方法: 方法一: 1.清理本地yum缓存 执行:yum clean all 2.查看软件包列表 执行:yum list 注意:如果查询不到软件包列表,查看yum ...

  5. 第3课 - 启航Lua之路

    第3课 - 启航Lua之路 1. Lua中的变量 (1)变量:全局变量和局部变量 — Lua中支持全局变量和局部变量的概念 全局变量:直接定义变量名,并复制 a = 1;   -- 用 ; 结束当前语 ...

  6. Hadoop入门学习整理(三)

    1.Hive 的安装 下载tar包,并且要注意和Hadoop版本兼容. 下载  ----->  传输 -------> 解压     即可. 然后配置环境变量和相关配置信息.   参考: ...

  7. SpringCloud实战 | 第一篇:Windows搭建Nacos服务

    前言 为什么放弃eureka选择nacos?本地开发环境需要搭建nacos-server,想着是很简单的事但是被一些文章(少了关键必要的步骤)给带偏了,所以亲测成功后写了这篇文章. 搭建nacos-s ...

  8. yum管理——yum常用配置(2)

    一.网络源的缓存设置 [root@yunwei ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever k ...

  9. day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询

    目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...

  10. JsonPath使用教程

    application/json标识Json数据格式,是Http请求常见的一种Content-Type.我们经常也会看到接口返回数据类型为json格式.功能测试/自动化脚本里,经常会需要提取json数 ...