Selenium 2自动化测试实战7(定位元素)
一、xpath定位
1. 绝对定位
举例用百度输入框和搜索按钮
eg:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
eg:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")
Find_element_by_xpath()方法使用Xpath语言来定位元素,xpath主要用标签名的层级关系来定位元素的绝对路径,最外层为html语言。在body文本内,一级一级往下找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个,eg:div[2]表示当前层级的第二个div标签
2. 利用元素属性定位
除使用绝对路径外,Xpath也可以使用元素的属性值来定位,同样以百度输入框和搜索按钮为例:
find_element_by_xpath("//input[@id='kw']")
find_element_by_xpath("//input[@id='su']")
//表示当前页面某个目录下,input表示定位元素的标签名,[@id='kw']表示这个元素的id属性值等于kw。下面通过name和class属性值来定位。
find_element_by_xpath("//input[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_element_by_xpath("//*[@class='bg_s_btn']")
如果不想指定标签名,则也可以用星号(*)代替。当然,xpath不局限于id、name、class这三个属性值。元素的任意属性值都可以使用,只要它能唯一的标识一个元素。
3. 层级与属性结合
如果一个元素本身没有可以唯一标识这个元素的属性值,我们可以找其上一级元素,如果它的上一级元素有可以唯一标识属性的值,也可以拿来使用。
eg:find_element_by_xpath("//span[@class='bg_s_ipt_wr']/input")
span[@class='bg_s_ipt_wr']通过class属性定位到父元素,后面/input就表示父元素下面的子元素。如果父元素没有可利用的属性值,那么可以继续向上查找“爷爷”元素。我们可以通过这种方法一级一级向上去找,直到找到最外层的<html>标签,这就是一个绝对路径的写法了。
4. 使用逻辑运算符
如果一个属性不能唯一区分一个元素,还可以使用逻辑运算符连接多个属性来查找元素。
#and
find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")
二、 CSS定位
1. CSS的语法和使用
2. 通过class属性定位:
find_element_by_css_selector(".s_ipt")
find_element_by_css_selector()方法用于CSS语言来定位元素,点号(.)表示通过class属性来定位元素
3. 通过id属性定位:
find_element_by_css_selector("#kw")
井号(#)表示通过id属性来定位元素
4. 通过标签名定位:
find_element_by_css_selector("input")
标签名重复的概率非常大,所以通过这种方式很难找到想要的元素。
5. 通过父子关系定位:
find_element_by_css_selector("span>input")
父亲元素span,查找它的所有标签名叫input的子元素。
6. 通过属性定位:
find_element_by_css_selector("[name='kw']")
find_element_by_css_selector('[type="submit"]')
在CSS中也可以使用元素的任意属性,只要这些属性可以唯一标识这个元素。对于属性值来说,可加引号,也可以不加,但注意个整个字符串的引号进行区分。
7. 组合定位:
find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")
有一个父元素,它的标签名叫span:它有一个class属性值叫bg s_ipt_wr:它有一个子元素,标签名叫input,并且这个子元素的class属性值叫s_ipt。
三、xpath与CSS的类似功能对比
1. 用By定位元素
webdriver还提供了另外一种写法,即统一调用find_element()方法,通过By来声明定位的方法,并且传入对应定位方法的定位参数,如下:
find_element()方法只用于定位元素,他需要两个参数,第一个参数是定位的类型,由By提供;第二个参数是定位的具体方式。在使用By之前需要将By类导入。
from selenium.webdriver.common.by import By
Selenium 2自动化测试实战7(定位元素)的更多相关文章
- Selenium 2自动化测试实战
Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...
- Selenium 2自动化测试实战3(函数、类和方法)
一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...
- 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法
虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...
- Selenium+Python自动化测试实战(2)元素定位
1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...
- 解决Selenium弹出新页面无法定位元素问题(Unable to locate element)
Python 2.7 IDE Pycharm 5.0.3 环境细节详见Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录 对于同一页面无法定位元素问题请见姊妹篇解 ...
- Selenium(十):用By定位元素、鼠标事件、键盘事件
1. 用By定位元素 除了前面介绍的单位方法,WebDriver还提供了另外一套写法,即统一调用find_element()方法,通过By来声明定位的方法,并且传入对应定位方法的定位参数.具体如下: ...
- Selenium 2自动化测试实战10(鼠标事件)
一.鼠标事件 1. webdriver中,关于鼠标操作的方法封装在ActionChains类中 ActionChains类提供了鼠标操作的常用方法: perform:执行所有ActionChains中 ...
- python+selenium基础篇,By定位元素
1.By定位和find_element_by_XXXXXX是一样的,如下图所示,定位元素的方法都是一样的 2.使用By定位代码如下所示 from selenium import webdriver f ...
- Selenium 2自动化测试实战14(定位一组元素)
一.定位一组元素 WebDriver还提供了与前面所对应的8钟用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个S表示复数.定位一组元素一 ...
随机推荐
- 1.SpringBoot整合Mybatis(CRUD的实现)
准备工具:IDEA jdk1.8 Navicat for MySQL Postman 一.新建Project 选择依赖:mybatis Web Mysql JDBC 项目结构 pom依赖: & ...
- Linux :file、which 、whereis、locate、find
1 file 观察文件类型 file 文件 2 which 寻找文件 选项与参数: -a : 将所有由PATH目录中可以知道的指令列出,而不止一个被找到的指令名称 3 whereis 寻找特定文件 ...
- [CF 1238F] The Maximum Subtree 树DP
题意 给定一颗树,求这个树的最大子树,且这个子树是一个good-tree. good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交. 题解 通过分析可以发现 ...
- ecshop新版不能在模板文件.dwt和.lbi中直接添加php代码的解决方法
ecshop新版不能在模板文件.dwt和.lbi中直接添加php代码了,为什么呢? 因为直接在模板中加入php函数和代码,没有经过过滤,容易造成安全隐患.程序源码安全是非常重要的. 不过如果有朋友希望 ...
- 【未知来源】K-th String
题意 求有多少种 前 \(n\) 个小写字母的排列 \(t\),满足其所有子串按字典序从小到大排列,第 \(k\) 个子串是一个给定字符串 \(s\).答案模 \(10^9+7\). \(1\le n ...
- 【bzoj 4059】Non-boring sequences
这题的重点不在于代码,而在于复杂度分析…… 首先我们肯定会写 $n^2$ 暴力,就是每次暴力扫 $[l,r]$ 区间,找到任意一个在此区间中只出现过一次的数.设其下标为 $mid$,显然在这个区间中任 ...
- 使用IDEA搭建一个 Spring + Spring MVC + Mybatis 的Web项目 ( 零配置文件 )
前言: 除了mybatis 不是零配置,有些还是有xml的配置文件在里面的. 注解是Spring的一个构建的一个重要手段,减少写配置文件,下面解释一下一些要用到的注解: @Configuration ...
- qt5-信号和槽
信号函数: connect(btn,&QPushButton::clicked,this,&QWidget::close); //参数1 信号发送者://参数2 信号:---& ...
- Session中的方法
Session 管理一个数据库的任务单元,即管理数据库中的增删改查操作,提交事务. 方法CRUD:save(),delete(),load(),get(),update(),saveOrUpdate( ...
- python_自动化测试用例参数化
参数化有三种,代码驱动,数据驱动,关键字驱动 代码驱动,测试数据写在代码中 如下: import requests,json import unittest import BeautifulRepor ...