本文实例讲述了Selenium定位元素操作。分享给大家供大家参考,具体如下:
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
在前面一篇《Selenium基本用法》中简单记录了Selenium的使用,接下来记录一下元素的定位,Selenium提供了多种策略来定位页面中的元素,Selenium提供了以下方法来定位页面中元素,你可以根据自己的喜好来进行选择:
- find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素
- find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素
- find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素
- find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素
- find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素
- find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素
- find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素
- find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素
值得注意的是,上面方法只会匹配查找只会获取第一个元素。除了上面这些查找单个元素的方法之外,Selenium还定义查找多个元素的方法:
- find_elements_by_name:通过name进行匹配查找,返回所有匹配到的元素列表
- find_elements_by_xpath:通过xpath进行匹配查找,返回所有匹配到的元素列表
- find_elements_by_link_text:通过链接内容进行匹配查找,返回所有匹配到的元素列表
- find_elements_by_partical_link_text:通过部分链接内容进行匹配查找,返回所有匹配到的元素列表
- find_elements_by_tag_name:通过标签名称进行匹配查找,返回所有匹配到的元素列表
- find_elements_by_class_name:通过class名称进行匹配查找,返回所有匹配到的元素列表
- find_elements_by_css_selector:通过CSS选择器进行匹配查找,返回所有匹配到的元素列表
除了上面给出的公有方法之外,Selenium还提供了两种私有方法可能对页面对象中的定位器有用,这两个私有方法是:find_element
和find_elements
:
1
2
3
|
from selenium.webdriver.common.by import By
element = driver.find_element(By.XPATH, '//*[@id="su"]' )
elements = driver.find_elements(By.XPATH, '//button' )
|
下面是By
可用的属性:
1
2
3
4
5
6
7
8
|
ID = 'id'
NAME = 'name'
XPATH = 'xpath'
LINK_TEXT = '链接内容'
PARTIAL_LINK_TEXT = '部分链接内容'
TAG_NAME = '标签名称'
CLASS_NAME = '类名'
CSS_SELECTOR = 'CSS选择器'
|
通过ID定位
当你知道元素的ID属性时,你可以使用它,使用此策略,将返回ID属性值与该匹配的第一个元素。如果没有元素匹配到此ID属性,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
1
|
< input id = "login_id" type = "text" />
|
我们知道了这个元素的ID,我们可以这样进行定位:
1
|
element = driver.find_element_by_id( 'login_id' )
|
通过name定位
当你知道元素的name属性时,你可以使用它,使用此策略,将返回name属性值与该匹配的第一个元素。如果没有元素匹配到此name属性,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
1
|
< input name = "login" type = "text" />
|
我们知道了这个元素的name,我们可以这样进行定位:
1
|
element = driver.find_element_by_name( 'login' )
|
通过XPath定位
XPath是用于在XML文档中查找节点的语言,由于XML可以是HTML的实现,因此Selenium用户可以利用这种强大的语言来定位其Web应用程序中的元素。XPath扩展了通过id和name属性定位的简单方法,并打开了各种新的可能性,例如在页面中查找第三个复选框。举个栗子,有这样一个数据源:
1
2
3
4
5
6
7
8
9
10
|
< 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 >
|
我们可以这样进行定位:
1
|
user_element = driver.find_element_by_xpath( "/html/body/form/input[@name='username']" )
|
或者
1
|
user_element = driver.find_element_by_xpath( "/html/body/form/input" )
|
或者
1
|
user_element = driver.find_element_by_xpath( '//input[1]' )
|
或者
1
|
user_element = driver.find_element_by_xpath( "//input[@name='username'][@type='text']" )
|
通过链接内容定位
当你知道链接元素的内容时,你可以使用它,使用此策略,将返回链接内容与该匹配到的第一个元素。如果没有元素匹配到此链接内容,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
1
2
3
4
5
6
7
|
< html >
< body >
< p >Are you sure you want to do this?</ p >
< a href = "continue.html" rel = "external nofollow" rel = "external nofollow" >Continue</ a >
< a href = "cancel.html" rel = "external nofollow" >Cancel</ a >
</ body >
< html >
|
其中<a href="continue.html" rel="external nofollow" rel="external nofollow" >Continue</a>
元素可以这样定位:
1
|
element = driver.find_element_by_link_text( 'Continue' )
|
或者
1
|
element = driver.find_element_by_partical_link_text( 'Con' )
|
通过标签名称定位
当你知道标签的名称时,你可以使用它,使用此策略,将返回标签名称与该匹配到的第一个元素。如果没有元素匹配到此标签名称时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
1
2
3
4
5
6
|
< html >
< body >
< h1 >Welcome</ h1 >
< p >Site content goes here.</ p >
</ body >
< html >
|
我们可以这样对<p>
元素进行定位:
1
|
element = driver.find_element_by_tag_name( "p" )
|
通过类名进行定位
当你知道类名的时候,你可以使用它,使用此策略,将返回类名与该匹配到的第一个元素。如果没有元素匹配到此类名称时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
1
2
3
4
5
|
< html >
< body >
< p class = "content" >Site content goes here.</ p >
</ body >
< html >
|
我们可以这样对<p>
元素进行定位:
1
|
element = driver.find_element_by_class_name( 'content' )
|
通过CSS选择器进行定位
当你想通过CSS选择器语法找到一个元素时,你可以使用它,使用此策略,将返回匹配CSS选择器的第一个元素。如果没有元素匹配到此CSS选择器时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
1
2
3
4
5
|
< html >
< body >
< p class = "content" >Site content goes here.</ p >
</ body >
< html >
|
我们可以这样对<p>
元素进行定位:
1
|
element = driver.find_element_by_css_selector( 'body p' )
|
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/y472360651/article/details/79659968