一、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(定位元素)的更多相关文章

  1. Selenium 2自动化测试实战

    Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...

  2. Selenium 2自动化测试实战3(函数、类和方法)

    一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...

  3. 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法

    虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...

  4. Selenium+Python自动化测试实战(2)元素定位

    1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...

  5. 解决Selenium弹出新页面无法定位元素问题(Unable to locate element)

    Python 2.7 IDE Pycharm 5.0.3 环境细节详见Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录 对于同一页面无法定位元素问题请见姊妹篇解 ...

  6. Selenium(十):用By定位元素、鼠标事件、键盘事件

    1. 用By定位元素 除了前面介绍的单位方法,WebDriver还提供了另外一套写法,即统一调用find_element()方法,通过By来声明定位的方法,并且传入对应定位方法的定位参数.具体如下: ...

  7. Selenium 2自动化测试实战10(鼠标事件)

    一.鼠标事件 1. webdriver中,关于鼠标操作的方法封装在ActionChains类中 ActionChains类提供了鼠标操作的常用方法: perform:执行所有ActionChains中 ...

  8. python+selenium基础篇,By定位元素

    1.By定位和find_element_by_XXXXXX是一样的,如下图所示,定位元素的方法都是一样的 2.使用By定位代码如下所示 from selenium import webdriver f ...

  9. Selenium 2自动化测试实战14(定位一组元素)

    一.定位一组元素 WebDriver还提供了与前面所对应的8钟用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个S表示复数.定位一组元素一 ...

随机推荐

  1. 多线程 - 线程通信 suspend-resume wait-notify park-unpark 伪唤醒

    线程通信(如 线程执行先后顺序,获取某个线程执行的结果等)有多种方式: 文件共享 线程1 --写入--> 文件 < --读取-- 线程2 网络共享 变量共享 线程1 --写入--> ...

  2. 多态(Polymorphism)的实现机制

    1. 我理解的广义的 override 是指抛开各种访问权限,子类重定义(redefine)父类的函数(即函数签名相同). 2. C++中的三个所谓的原则:never redefine base cl ...

  3. java String练习

    package com.oracle.demo01; public class WorkNext { public static void main(String[] args) { //题目一:获取 ...

  4. 三大方面,分析 to B和 to C产品的区别

    作为互联网从业者,我们经常听到to B(或2B)和to C(或2C)两个概念.to B即面向企业客户,to C即面向普通用户.只要是互联网人基本都懂知道这两个概念,但如果别人再问“to B和to C产 ...

  5. shell知识点(二)

    Shell 中的数组 Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: 方式2: arr=(value1 value2 value3)   (这种方式带值) ...

  6. Spring 静态代理和动态代理

    现在我们来模拟一下,某位学生去考试. 假设他(小明)正常的考试. 运行结果:        结果: 突然某一天,他睡过头了,来不急去考试,所有他打算叫另一个人(Cheater)去代替他考试. 运行结果 ...

  7. windows笔记本命令行方式建立wifi热点

    建立热点: @echo off netsh wlan set hostednetwork mode=allow netsh wlan set hostednetwork ssid=热点名 key=密码 ...

  8. Python CGI编程Ⅵ

    GET和POST方法 浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法. 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面 ...

  9. [转帖]H5 手机 App 开发入门:技术篇

    H5 手机 App 开发入门:技术篇   http://www.ruanyifeng.com/blog/2019/12/mobile-app-technology-stack.html 阮一峰老师的文 ...

  10. C# TextBox 拖入数据 为路径

    1. 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等),在DragDrop事件中对“信息”进行解析. 2.接受拖放控件的AllowDrop属性必须设置成true; 3 ...