定位元素,selenium提供了8中元素定位方法:

(1)find_element_by_id() :html规定,id在html中必须是唯一的,有点类似于身份证号

(2)find_element_by_name() :html规定,name用来指定元素的名称,有点类似于人名

(3)find_element_by_tag_name() :通过元素的签名来定位

(4)find_element_by_class_name() :html规定,class指定元素的类名

(5)find_element_by_link_text() :专门用来定位文本链接

(6)find_element_by_partial_link_text() :是对link_text的一种补充,有些文字链接比较长,可以取一部分链接文字进行定位,只要这部分文字是唯一标志这个链接的

(7)find_element_by_css_selector()

(8)find_element_by_xpath()

==========================================================================================================
=========================================================================================================

http://www.baidu.com 首页html源代码

输入框: <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

确定按钮: <input type="submit" id="su" value="百度一下" class="bg s_btn">

上面一行链接:

<a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>

<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>

<a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a>

<a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>

<a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">贴吧</a>

<a href="http://xueshu.baidu.com" name="tj_trxueshu" class="mnav">学术</a>

<a href="https://passport.baidu.com/v2/?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2F" name="tj_login" class="lb" onclick="return false;">登录</a>

<a href="http://www.baidu.com/gaoji/preferences.html" name="tj_settingicon" class="pf">设置</a>

<a href="http://www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多产品</a>

---------------------------------------------------------------------------------------------------------------------------------------------------

(1)id定位

find_element_by_id('kw') :输入框

find_element_by_id('su') :'百度搜索'按钮

(2)name定位

find_element_by_name('wd') :输入框

(3)class_name定位

find_element_by_class_name('s_ipt') :输入框

(4)tag_name定位

find_element_by_tag_name('input') :输入框

(5)link_text定位

find_element_by_link_text('新闻')

find_element_by_link_text('地图')

find_element_by_link_text('视频')

find_element_by_link_text('贴吧')

(6)partial_link_text定位

find_element_by_partial_link_text('新')

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(7)XPath定位

(一)、绝对路径

driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input").send_keys('中国')

注意:我先找最后一个span的路径,再加上input的,直接在最后的input上面复制不了路径

(二)、利用元素属性定位: 输入框: <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

确定按钮: <input type="submit" id="su" value="百度一下" class="bg s_btn">

driver.find_element_by_xpath("//input[@id='kw']") 输入框

driver.find_element_by_xpath("//input[@id='su']") 搜索确定按钮

//input表示当前页面某个input标签;

id='kw'表示这个元素的id值是kw;

--------------------------------------------

也可以通过name和class来定位:

driver.find_element_by_xpath("//*[@name='kw']") 输入框

driver.find_element_by_xpath("//*[@class='s_ipt']") 输入框

如果不想指定标签名,也可以用*号代替,当然,XPath不局限于id、name、class这3个属性值,元素的任意属性都可以使用,只要其能标志唯一的一个元素;

driver.find_element_by_xpath("//input[@maxlength='255']") 输入框

driver.find_element_by_xpath("//input[@autocomplete='off']") 输入框

driver.find_element_by_xpath("//input[@type='submit']") 搜索确定按钮

(三)、层级与属性结合

如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以查找其上一级元素。如果上一级元素可以唯一标识,则可以拿来用。

加上百度输入框没有可以利用的属性值,那么可以查找它的上一级属性:

driver.find_element_by_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input").send_keys('中国') 输入框

driver.find_element_by_xpath("//span[@class='bg s_btn_wr']/input").click() 搜索确定按钮

注意:此种方法有问题注,使用该路径查询提示找不到(原因未知)

如果父元素也没有利用价值,那么可以继续向上查找父元素的父元素:

driver.find_element_by_xpath("//form[@id='form']/span[1]/input").send_keys('中国') 输入框

driver.find_element_by_xpath("//form[@id='form']/span[2]/input").click() 搜索确定按钮

(四)、使用逻辑运算符

如果一个属性不能唯一确定一个元素,那么可以用逻辑运算符连接多个属性来查找:

driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys('中国') 输入框

driver.find_element_by_xpath("//input[@id='su' and @type='submit']").click() 搜索确定按钮

(五)、使用contains方法

contains方法用于匹配一个属性中包含的字符串:

driver.find_element_by_xpath("//span[contains(@class,'s_ipt_wr')]/input").send_keys('中国') 输入框

driver.find_element_by_xpath("//input[contains(@id,'su')]").click() 搜索确定按钮

(六)、使用text()方法

text()方法,用于匹配显示的文本信息,类似实现了link_text定位

driver.find_element_by_xpath("//a[text(),'新闻']")

driver.find_element_by_xpath("//a[contains(text(),'新闻')]") #两个配合使用

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

选择器 示例 示例说明

.class .intro 选择所有class="intro"的元素

#id #firstname 选择所有id="firstname"的元素

* * 选择所有元素

element p 选择所有<p>元素

element,element div,p 选择所有<div>元素和<p>元素

element element div p 选择<div>元素内的所有<p>元素

element>element div>p 选择所有父级是 <div> 元素的 <p> 元素

element+element div+p 选择所有紧接着<div>元素之后的<p>元素

[attribute] [target] 选择所有带有target属性元素

[attribute=value] [target=-blank] 选择所有使用target="-blank"的元素

(8)CSS定位

(一)、通过class定位

点( . )号表示通过class来定位元素

driver.find_element_by_css_selector(".s_ipt").send_keys('中国') 输入框

driver.find_element_by_css_selector(".bg.s_btn").click() 搜索确定按钮

注:bg s_btn中间的空格用 . 代替

注:class='bg s_ipt_wr quickdelete-wrap',类似这种叫复合class,由多个类选择器组成,

定位的写法则是: .bg.s_ipt_wr.quickdelete-wrap,所有空格用.(点)代替

(二)、通过id定位

driver.find_element_by_css_selector("#kw").send_keys('中国') 输入框

driver.find_element_by_css_selector("#su").click() 搜索确定按钮

(三)、通过标签名定位

在CSS中,用标签名定位元素时,不需要任何标识符号,直接使用标签名即可

driver.find_element_by_css_selector("input[name=wd]").send_keys('中国') 输入框

driver.find_element_by_css_selector("input[id=su]").click() 搜索确定按钮

(四)、通过属性定位

CSS中可以使用元素的任意属性定位,只要这些属性可以唯一标识这个元素;

对属性值来说,可以加引号,也可以不加,但是要注意和整个字符的引号进行取费。

driver.find_element_by_css_selector("[autocomplete=off]").send_keys('中国') 输入框

driver.find_element_by_css_selector("[name='wd']").send_keys('中国') 输入框

driver.find_element_by_css_selector('[type="submit"]').click() 搜索确定按钮

(五)、通过标签层级关系定位

driver.find_element_by_css_selector("span > input#kw").send_keys('中国')

driver.find_element_by_css_selector('span > input#su').click()

(六)、组合定位

driver.find_element_by_css_selector("form.fm > span > input.s_ipt").send_keys('中国')

driver.find_element_by_css_selector("form#form > span > input#kw").send_keys('中国')

(七)、更多定位用法

==============================================================================================================

有时候我们定位不到元素可能的原因:

1.检查搜索对象是否忘记打引号;

2.Frame/Iframe原因定位不到元素;

3.Xpath描述错误原因: 解决办法:编写好Xpath路径,chrome的F12->html,ctrl+F进行查找,看是否能查找到。

4.页面还没有加载出来,就对页面上的元素进行的操作: 解决办法:导入time模块设置等待时间。

5.动态id定位不到元素: 解决办法:如果是动态的id,最好不要使用,转而使用xpath或其它方式定位

6.二次定位,如弹出框登录: 解决办法:先定位到弹出框,再定位到弹出框内的元素。

7.不可见元素定位:

[emoji:00a0] [emoji:00a0] [emoji:00a0]如上百度登录代码,通过名称为tj_login查找的登录元素,有些是不可见的,

所以加一个循环判断,找到可见元素(is_displayed())点击登录即可。

8.浏览器兼容问题,比如SPACE空格操作Firefox就识别不了,而Chrome就能够识别做出响应。

9.页面刷新或者后退后找不到元素

页面刷新或者后退后,不能直接采用之前定位的元素进行操作,需要重新定位再进行操作。

python+selenium元素定位——8种方法的更多相关文章

  1. Selenium2+python自动化65-js定位几种方法总结

    Selenium2+python自动化65-js定位几种方法总结   前言 本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法 除了i ...

  2. App元素定位三种方法

    来自博客: http://testingpai.com/article/1595507262082 以下方法操作前必须确保有手机设备连入电脑,检测是否有手机连入命令 adb devices 第一种:A ...

  3. python selenium 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  4. selenium 元素定位常用的方法

    元素定位的方法有2个 driver.findElement(By.args) 返回值是WebElement            //此方法是获取单一的页面元素 driver.findElements ...

  5. python+selenium 元素定位--iframe

    1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ...

  6. Selenium2+python自动化65-js定位几种方法总结【转载】

    前言 本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法 除了id是定位到的是单个element元素对象,其它的都是elements返 ...

  7. python+selenium元素定位之XPath学习02

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 ...

  8. python+selenium元素定位之XPath学习01

    参考文档1:https://www.w3school.com.cn/xpath/xpath_syntax.asp 参考文档2:https://www.runoob.com/xpath/xpath-tu ...

  9. python+selenium元素定位之CSS学习02

    参考文档:https://www.runoob.com/cssref/css-selectors.html CSS选择器用于选择你想要的元素的样式的模式. "CSS"列表示在CSS ...

随机推荐

  1. vue,一路走来(17)--vue使用scss,并且全局引入公共scss样式

    最近朋友问如何在vue项目中使用scss样式,想起之前项目是直接在main.js直接import css文件的,然而main.js不可以直接import scss文件. import './asset ...

  2. VB之Collection---Collection集合类

    你看到的这个文章来自于http://www.cnblogs.com/ayanmw 由于要对一些数据进行处理,比较麻烦,实现某个算法要处理大量不同的不同类型的数据. 所以考虑到一些因素,又在使用VB6( ...

  3. 关于数据库抛出异常:Incorrect string value: '\xE1\x...' for column '字段名' at row 1 问题的解决方法

    打开sql,进行语句编辑 ENGINE=InnoDB DEFAULT CHARSET=utf8;字符集设置utf-8编码

  4. springboot+HttpInvoke 实现RPC调用

    开始用springboot2+hession4实现RPC服务时,发现第一个服务可以调用成功,但第二个就一直报 '<' is an unknown code.第一个服务还是可以调用的.参考网上的方 ...

  5. php内置函数分析之current()、next()、prev()、reset()、end()

    current()初始指向插入到数组中的第一个单元 next() 将数组的内部指针向前移动一位 prev() 将数组的内部指针倒回一位 reset() 将数组的内部指针指向第一个单元 end() 将数 ...

  6. CSS居中完全指南——构建CSS居中决策树

    CSS居中完全指南--构建CSS居中决策树 本文总结CSS居中,包括水平居中和垂直居中.本文相当于CSS决策树,下次再遇到CSS居中问题时有章可循. 参考Centering in CSS: A Com ...

  7. 与Swing的相识

    参考自http://c.biancheng.net/swing/ Swing是一个用于Java GUI编程(图形界面设计)的工具包(类库):换句话说,java可以用来开发带界面的PC软件,使用到的工具 ...

  8. Linux内核设计与实现 总结笔记(第十五章)进程地址空间

    一.地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址. 每个进程都有一个32位或64位的平坦地址空间,空间的具体大小取决于体系结构.“平坦”指的是地址空间范围是一 ...

  9. JWT--无状态单点登录

    序言 传统的 seesion 认证存在的问题: 1)用户信息存储在内存中,用户规模大之后增加服务器开销:2)由于登录信息存储在内存中,限制了登录机器,不利于分布式站点. JWT JWT无状态登录 常规 ...

  10. 【bzoj1093】 [ZJOI2007]最大半连通子图

    *题目描述: 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到u的有向路 ...