定位元素

WebDriver 属于 Selenium 体系中设计出来python操作浏览器的一套 API。

webdriver 提供8种定位元素的方法:

  1. id
  2. name
  3. class name
  4. tag name
  5. link text
  6. partial link text
  7. xpath
  8. css selector

Python 语言中对应的定位方法如下:

  1. find_element_by_id()
  2. find_element_by_name()
  3. find_element_by_class_name()
  4. find_element_by_tag_name()
  5. find_element_by_link_text()
  6. find_element_by_partial_link_text()
  7. find_element_by_xpath()
  8. find_element_by_css_selector()

ID

唯一值

find_element_by_id("标签中的id属性值")

name

如果没给定该属性则不能通过该方法查找

find_element_by_name("标签中的name属性值")

class name

通过类名,有可能有多个相同的类名,返回一个数组

find_element_by_class_name("标签中的class name值")

tag name

通过标签名,一般都有多个相同的标签名,返回一个数组

find_element_by_tag_name("标签名")

link text

专门用来定位文本链接,通过元素标签对之间的文本信息来定位元素。

<a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>
<a class="mnav" name="tj_trvideo" href="http://v.baidu.com">视频</a>
<a class="mnav" name="tj_trtieba" href="http://tieba.baidu.com">贴吧>

Python 对于中文的支持并不好,如查 Python 在执行中文的地方出现在乱码,可以在中文件字符串的前面加个小"u"可以有效的避免乱码的问题,加 u 的作用是把中文字符串转换中 unicode 编码,

find_element_by_link_text(u"新闻")

partial link

对link text,有些文本连接会比较长,可以取文本链接的一部分定位,只要这一部分信息可以唯一的标识这个链接。

<a class="mnav" name="tj_lang" href="#">如果链接的文本很长很长,你可以选取一部分进行唯一定位</a>

定位:

find_element_by_partial_link_text("进行唯一定位")

Xpath定位

XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现,所以 selenium用户可是使用这种强大语言在 web 应用中定位元素。

1)层级绝对定位:通过标签寻路定位

寻找html下->body->div->第2个div->div->div->div->from->span->input.找到该input元素:

find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")

2)元素属性定位

find_element_by_xpath("//input[@class=‘s_ipt‘]") #查找当前页面下某个目录中,标签名为input,class属性的值为s_ipt的元素
find_element_by_xpath("//*[@id=‘wd‘]") #查找当前页面下某个目录中,所有标签,id属性值为wd的元素

// :表示当前页面某个目录下

所有属性都可以用来定位,当然该属性最好具有唯一性

3)层级与属性结合

如果一个元素本身并没有可以唯一标识这个元素的属性值,但是它的上级有可以唯一标识属性的值。

可以这样用:

find_element_by_xpath("//span[@class=‘bg s_btn_wr‘]/input") #先定位input标签的父标签,即class属性为bg s_btn_wr的span标签,然后再取得其下面的input标签元素

如果父级也不能唯一标识,那就先定位父级的父级,依此往上推。

4)逻辑运算符: 联合多个属性定位

#<input id="kw" class="su" name="ie">
find_element_by_xpath("//input[@id=‘kw‘ and @class=‘su‘]/span/input")

Firebug 前端调试工具和 FirePath 插件可以方便的辅助 XPath 语法。打开 FireFox 浏览器的 FireBug 插件,点击插件左上角的鼠标箭头,再点击页面上需要定位的元素,在元素行上右键弹出快捷菜单,选择“复制 XPath”,将会获得当前元素的 XPath 语法:

css 定位

CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比 XPath 快。

  1. .class : class 选择器
  2. #id: id 选择器
  3. * : 选择所有元素
  4. element: 标签元素
  5. element1 > element2:  直系,选择父元素为 element1元素的所有elment2元素
  6. element1 + element2:  非直系,选择紧接在element1 元素之后的所有element2 元素
  7. element[attribute=value] : 选择attribute="value" 的所有element元素。

组合定位:

find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt") #选择span标签,类名为bg s_ipt_wr,该span标签下面的input标签类名为s_ipt

我们通过可以使用 Firebug 工具帮助我们生成 CSS 语法。通过 Firebug 定位元素,在元素上右键点击选择“复制 CSS”

find_element()与 By 定位元素

在使用 By 时需要将 By 类导入:from selenium.webdriver.common.by import By

  • 参数1:定位方式
  • 参数2:定位的值
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新闻")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class=‘bg s_btn‘]")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
时间: 2024-10-13 20:56:51

定位元素的相关文章

使定位元素居中的4种方法例举

例子: 创建两个div,定位父级'box'  和   定位元素'sun'.本文要做的是 'sun' 要在 'box' 中居中显示, 该怎么做呢? 定位前效果图: 定位元素居中后的效果图: HTML代码: <!--定位元素父级--> <div id="box"> <!--定位元素--> <div id="sun"></div> </div> 样式代码: <style type="t

WebDriver定位元素方法

如果把页面上的元素看作人的话,在现实世界如何找到某人呢?方法有三: 一.通过人本身的属性,例如他的姓名,手机号,身份证号,性别,这些可区别他人的属性.在web页面上的元素也有这些属性,例如,id.name.class name.tag name等. 二.在找查某人的时候可以通过位置属性,例如,x国.x市.x路.x号.Xpath和CSS就提供了这种以标签名为层级关系的定位方式. 三.可以借助相关他人的属性来找到某人,例如,我没有小明的联系方式,但我有他爸爸的手机号,那么通过他爸爸手机号也可以找到小

使用findElement方法定位元素

selenium WebDriver定位元素是通过findElement()和findElements()方法. findElement()方法返回一个基于指定查询条件的WebElement对象或是抛出一个没有找到符合条件元素的异常. findElements()方法会返回匹配指定查询条件的webElements对象的集合,如果没有找到则返回空. 查询方法会将By实例作为参数传入.Selenium WebDriver提供了By类来支持各种查询策略. 策略: 方法 By  ID   driver.

定位元素锦集

项目需要,对主要流程进行脚本自动化测试.在编写脚本的过程中,碰上一些特殊的元素,难以定位.在此,做个记录,方便日后总结. 1.定位购物车中指定商品的数量 原则上每个商品都对应一个数量控件,如果要想获取指定商品的数量,必须定位到指定商品的block,再定位该block的数量控件. 有个注意的地方就是,该block必须同时包含该商品的标识元素与目标定位元素. amount: {    get: function () {        var result = browser.element("p=

CSS 定位元素之 relative

1. relative 和 absolute relative 会限制 absolute. absolute 会根据 父级的的定位元素来定位. 2. overflow 和 absolue 当overflow碰到 absolute的时候 overflow会失效 如果要overflow有效 必须使用relative 和 fixed.   3. relative 和 层级 z-index 当使用relative的时候 自身的层级并不能决定你 的层级位置 而是要看relative的层级 relative

selenium2.0第一部分:定位元素

Selenium WebDriver提供了先进的技术定位网页上的元素,Selenium丰富的API提供了多种定位元素的策略,例如如姓名.XPath ID.CSS选择器等等,也能自定义定位方法来定位元素 一.通过fidElement方法定位元素 WebDriver and WebElement class.提供findElement()和findElements()方法来定位元素 findElement()方法会通过特殊的索引返回web元素的信息,或者抛出异常(没有找到匹配的元素) findEle

隐藏元素、浮动元素、定位元素

<html> <head> <meta charset="utf-8"> <title>隐藏元素.浮动元素.定位元素</title> <style> p{ width:300px; background:pink; } #column{ background:pink; width:33%; float:left; border-top:1px solid white; border-left:2px solid

Appium学习路—Android定位元素与操作

一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Inspector:Appium自带的一个功能,只有mac下可以使用该功能 下面是用monitor抓取到的页面元素 下面使用Appium Inspector定位的元素 二.元素定位   1.格式:find_element_by_定位方式(value) 通过id定位 (取resource-id的值): dr

webdriver中定位元素,报无法找到元素的问题

webdriver中定位元素,报无法找到元素的问题时,需要查看以下几点: 1 用火狐的firebug插件定位元素,确保这个元素的定位正确: 2 在火狐的firebug插件的,在html页签中输入frame或者iframe去查看这个元素所在的frame或iframe是什么: 写如下语句: WebElement iframe = driver.findElement(By    .xpath("//*[@id='ContentFrame']"));  driver.switchTo().f