python webdriver API——简单对象的定位

  • 时间:
  • 浏览:
  • 来源:互联网

文章目录

  • 内容
  • 一、常见的元素定位方法
  • id、name
  • tag name
  • link text、partial text
  • xpath
  • css
  • xpath和css比较


内容

简单对象的定位


一、常见的元素定位方法

  • id :find_element_by_id()
  • name : find_element_by_name()
  • class name : find_element_by_class_name()
  • tag name : find_element_by_tag_name()
  • link text : find_element_by_link_text()
  • partial link text : find_element_by_partial_link_text()
  • xpath : find_element_by_xpath()
  • css selector : find_element_by_css_selector()

id、name

id和name是最常用的,因为大多数元素都有这两个属性,而且由于id属性的唯一性,所以id是优先考虑的定位方法。

<input id="gs_htif0" class="gsfi" aria-hidden="true" dir="ltr">
<input type="submit" name="btnK" jsaction="sf.chk" value="Google 搜索">

通过元素所带的id和name进行定位

#id
ele_id = find_element_by_id('gs_htif0')
#name
ele_name = find_element_by_name('btnK')

tag name

不是所有的前端开发人员都喜欢为每一个元素添加 id 和 name 两个属性,但除此之外你一定发现了一个元素不单单只有 id 和 name,它还有 class 属性;而且每个元素都会有标签。

<div id="searchform" class="jhp_big" style="margin-top:-2px">
<form id="tsf" οnsubmit="return name="f" method="GET" action="/search">
<input id="kw" class="s_ipt" type="text" name="wd" autocomplete="off">

通过class name进行定位

ele_classname1 = find_element_by_class_name('jhp_big')
ele_classname2 = find_element_by_class_name('s_ipt')

通过tag name进行定位

ele_tagname1 = find_element_by_tag_name('div')
ele_tagname2 = find_element_by_tag_name('form')

tag name 定位应该是所有定位方式中最不靠谱的一种了,因为在一个页面中具有相同 tag name 的元素极其容易出现

link text、partial text

有时候需要操作的元素是一个文字链接,那么我们可以通过 link text 或 partial link text 进行元素定位;partial text可以理解为模糊定位,当一个文字链接很长时可以只取其中可以唯一标识元素的部分就可以了。

<a href="http://news.baidu.com" name="tj_news">新 闻</a>
<a href="http://tieba.baidu.com" name="tj_tieba">贴 吧</a>

通过link text、partial text定位

#两个定位的是同一个元素
ele_linktext = find_element_by_link_text('新闻')
ele_Plinktext = find_element_by_partial_text('新')

xpath

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

<----一个有层级关系页面--->
<html class="w3c">
<body>
	<div class="page-wrap">
	<div id="hd" name="q">
		<form target="_self" action="http://www.so.com/s">
		<span id="input-container">
			<input id="input" type="text" x-webkit-speech="" autocomplete="off" suggestwidth="501px" >

通过xpath定位最后一个元素:
1.绝对路径

ele_Rxpth = find_element_by_xpath('/html/body/div[2]/form/span/input"')

2.相对路径:

ele_xpath1 = find_element_by_xpath("//input[@id=’input’]") #通过自身的 id 属性定位
ele_xpath2 = find_element_by_xpath("//span[@id=’input-container’]/input") #通过上一级目录的id属性定位
ele_xpath3 = find_element_by_xpath("//div[@id=’hd’]/form/span/input") #通过上三级目录的 id 属性定位
ele_xpath4 = find_element_by_xpath("//div[@name=’q’]/form/span/input")#通过上三级目录的 name 属性定位
ele_xpath5 = find_element_by_xpath("//div[@id=’hd’ or @name=’q’")#布尔逻辑运算定位

当然,它的缺陷也非常明显:1、性能差,定位元素的性能要比其它大多数方式差;2、不够健壮,XPath
会随着页面元素布局的改变而改变;3. 兼容性不好,在不同的浏览器下对 XPath 的实现是不一样的。

css

CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。CSS 使用选
择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策略。CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比 XPath 快。
CSS 选择器的常见语法:
css常见语法

<div class="formdiv">
	<form name="fnfn">
		<input name="username" type="text"></input>
		<input name="password" type="text"></input>
		<input name="continue" type="button"></input>
		<input name="cancel" type="button"></input>
		<input value="SYS123456" name="vid" type="text">
		<input value="ks10cf6d6" name="cid" type="text">
	</form>
	<div class="subdiv">
		<ul id="recordlist">
			<p>Heading</p>
			<li>Cat</li>
			<li>Dog</li>
			<li>Car</li>
			<li>Goat</li>
		</ul>
	</div>
</div>

通过css语法进行匹配的实例:
css匹配实例

xpath和css比较

xpath和css定位方式的比较

本文链接http://element-ui.cn/article/show-153843.aspx