<译>Selenium Python Bindings 4 - Locating Eelements
有各种不同的策略来定位页面中的元素。你可以使用最合适定位方式用于你的用例。Selenium提供了以下方法来定位页面中的元素:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
为了找到多个元素(这些方法会返回一个列表):
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
- Locating by ID
 当你知道一个元素的id属性,请使用方法。在此策略下,与id属性值相匹配的位置的第一个元素将被返回。如果没有元素能匹配id属性,一个NoSuchElementException异常将抛出。
 为了测试,考虑这个页面的源代码:<html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> </form> </body> <html> 表格元素可以这样定位: login_form = driver.find_element_by_id('loginForm')
- Locating by Name
 当你知道一个元素的name属性,请使用方法。在此策略下,与name属性值相匹配的位置的第一个元素将被返回。如果没有元素能匹配name属性,一个NoSuchElementException异常将抛出。
 为了测试,考虑这个页面的源代码:<html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html> username & password 元素可以这样定位: username = driver.find_element_by_name('username') password = driver.find_element_by_name('password')页面中第一个"continue"会被先执行(当元素的name一样时,先被定位的先执行),代码如下: continue = driver.find_element_by_name('continue')
- Locating by XPath
XPath是一种用于在XML文档中定位节点使用的语言。HTML可以当作是XML ( XHTML )的实现,Selenium用户可以利用这个强大的语言定位他们Web应用程序中的元素。 XPath继承超出(以及配套)由id或name属性定位的简单方法,并开辟了各种新的可能性,如定位页面上的第三个复选框。 使用XPath最主要的原因是,当你想定位元素没有合适的id或name属性。您可以使用XPath定位元素的绝对路径(不建议) ,或相对于确实有一个id或name属性的元素。 XPath定位,也可用于其他指定的其他元素。 绝对的XPath包含从根(HTML)的所有元素的位置,其结果有可能会失败。通过查找附近有一个id或name属性的元素,你可以根据关系找到您的目标元素。这是不太可能改变的关系,可以让你的测试更强大。 为了测试,考虑这个页面的源代码: <html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html> 页面form元素可以这样定位: login_form = driver.find_element_by_xpath("/html/body/form[1]") login_form = driver.find_element_by_xpath("//form[1]") login_form = driver.find_element_by_xpath("//form[@id='loginForm']")①绝对路径 ②页面HTML中第一个form 
 ③form元素的id属性username 元素可以这样定位: username = driver.find_element_by_xpath("//form[input/@name='username']") username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]") username = driver.find_element_by_xpath("//input[@name='username']")clear 按钮可以这样定位: clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']") clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")
- Locating Hyperlinks by Link Text
 当你知道一个锚标签中使用的链接文本可以使用此方法。在此策略下,与链接文本值相匹配的位置的第一个元素将被返回。如果没有元素能匹配name属性,一个NoSuchElementException异常将抛出。
 测试用HTML代码如下:<html> <body> <p>Are you sure you want to do this?</p> <a href="continue.html">Continue</a> <a href="cancel.html">Cancel</a> </body> <html> 可以使用下面的方法来定位link: continue_link = driver.find_element_by_link_text('Continue') continue_link = driver.find_element_by_partial_link_text('Conti')
- Locating Elements by Tag Name
 当你想使用标签定位元素的时候,你可以使用此方法。使用此策略,第一个和元素匹配的标签将被返回,如果没有,则会异常抛出:
 测试用HTML代码:<html> <body> <h1>Welcome</h1> <p>Site content goes here.</p> </body> <html> 当你想定位(h1)元素的时候,你可以这样定位: heading1 = driver.find_element_by_tag_name('h1')
- Locating Elements by Class name
 当你想使用元素class属性名定位的时候,你可以使用此策略。页面第一个匹配的class 名将被返回,如果没有匹配的class name,则会抛出异常:
 测试用HTML代码:<html> <body> <p class="content">Site content goes here.</p> </body> <html> p标签定位方法如下: content = driver.find_element_by_class_name('content')
- Locating Elements by CSS Selectors
 当你想通过CSS选择器定位元素的时候,你可以使用此策略,如果没有匹配的css选择器,那么异常将会抛出:
 测试用HTML代码如下:<html> <body> <p class="content">Site content goes here.</p> </body> <html> 定位方法如下: content = driver.find_element_by_css_selector('p.content')
<译>Selenium Python Bindings 4 - Locating Eelements的更多相关文章
- <译>Selenium Python Bindings 1 - Installation
		Installation Introduction Selenium Python bindings 提供了一个简单的API来使用Selenium WebDriver编写使用功能/验收测试.通过Sel ... 
- <译>Selenium Python Bindings 5 - Waits
		如今,大多数的Web应用程序使用AJAX技术.当页面加载到浏览器,页面中的元素也许在不同的时间间隔内加载.这使得元素很难定位,如果在DOM中的元素没有呈现,它将抛出ElementNotVisibleE ... 
- <译>Selenium Python Bindings 2 - Getting Started
		Simple Usage如果你已经安装了Selenium Python,你可以通过Python这样使用: #coding=gbk ''' Created on 2014年5月6日 @author: u ... 
- <译>Selenium Python Bindings 6 - WebDriver API
		本章涉及Selenium WebDriver的所有接口. Recommended Import Style 推荐的导入风格如下: from selenium import webdriver 然后,你 ... 
- <译>Selenium Python Bindings 3 - Navigating
		当你想要通过webdriver导航到一个链接,正常的方式点是通过调用get方法: driver.get("http://www.google.com") Interacting w ... 
- selenium python bindings 元素定位
		1. 辅助 Firepath Firefox是所有做前端的必不可少的浏览器因为firebug的页面元素显示很清晰.用selenium 去定位元素的时候Firefox还有一个非常友好的工具就是firep ... 
- [译]Selenium Python文档:目录
		作者:Baiju Muthukadan 协议:本文档采用知识共享署名 - 共享4.0国际许可. 原英文网址:http://selenium-python.readthedocs.io/index.ht ... 
- [译]Selenium Python文档:一、安装
		1.1.简介 Selenium Python为使用Selenium WebDriver来编写功能/验证测试提供了一个简单的API接口.通过Selenium Python API,你可以以一种非常直观的 ... 
- [译]Selenium Python文档:二、初步开始
		2.1.简单使用 如果已经安装好了Selenium Python,你就可以像下面这样编写Python代码来使用它了: from selenium import webdriver from selen ... 
随机推荐
- CF 353C  Find Maximum    #205 (Div. 2)
			#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ]; ] ... 
- 被称为同步神器的 BTSync,你可以怎么用?
			在这高速运作的信息化时代,使用云端来衔接工作和生活的点滴已是寻常事.可你是否曾扪心自问过:用各大云端备份自己的信息资料,真的安全放心吗? 毫不夸张的说,其实恶意代码和漏洞早已和你如影随形.你甚至都不用 ... 
- 3、JPA一些常用的注解
			常用注解有下面这些: ①:@Entity.@Table.@Id.@GeneratedValue.@Column.@Basic ②:@Transient 用于忽略某个属性,而不对该属性进行持久化操作 ③ ... 
- What's New for Visual C# 6.0
			https://msdn.microsoft.com/en-us/library/hh156499.aspx nameof You can get the unqualified string nam ... 
- 将Ftp添加到资源管理器中直接使用
			在资源管理器中,右键,添加网络位置. 然后输入ftp的url ftp://server2008 使用匿名方式登录 
- [Codeforces673A]Bear and Game(水题,思路)
			题目链接:http://codeforces.com/contest/673/problem/A 题意:一个人看一个90分钟的节目,然后告诉你一些有趣的时刻.这个人假如在15分钟内还没有看到有趣的时刻 ... 
- 函数mem_pool_fill_free_list
			/********************************************************************//** Fills the specified free l ... 
- 数据库锁机制(一)——概述
			注:内容为自己的推理认知+网络,如有错误和不合理之处,敬请指出. 在多线程环境中我用使用线程锁处理并发问题,而在数据库系统中,并发问题可以细化到事务级别,而DBMS对此的处理方案就是使用锁. 为了适应 ... 
- C#基本知识点-Readonly和Const的区别
			什么是静态常量(Const)和动态常量(Readonly) 先解释下什么是静态常量(Const)以及什么是动态常量(Readonly). 静态常量(Const)是指编译器在编译时候会对常量进行解析 ... 
- Test语言编译器V0.8
			感觉这个挺好耍的,书上的代码有错误,而且功能有限. 一.词法分析 特点: (1)可对中文进行识别:(2)暂不支持负数,可以在读入‘-'时进行简单标记后就能对简单负数进行识别了. #include &l ... 
