本文实例讲述了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
:
from selenium.webdriver.common.by import By element = driver.find_element(By.XPATH,'//*[@id="su"]') elements = driver.find_elements(By.XPATH,'//button')
下面是By
可用的属性:
ID = 'id' NAME = 'name' XPATH = 'xpath' LINK_TEXT = '链接内容' PARTIAL_LINK_TEXT = '部分链接内容' TAG_NAME = '标签名称' CLASS_NAME = '类名' CSS_SELECTOR = 'CSS选择器'
通过ID定位
当你知道元素的ID属性时,你可以使用它,使用此策略,将返回ID属性值与该匹配的第一个元素。如果没有元素匹配到此ID属性,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
<input id="login_id" type="text"/>
我们知道了这个元素的ID,我们可以这样进行定位:
element = driver.find_element_by_id('login_id')
通过name定位
当你知道元素的name属性时,你可以使用它,使用此策略,将返回name属性值与该匹配的第一个元素。如果没有元素匹配到此name属性,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
<input name="login" type="text"/>
我们知道了这个元素的name,我们可以这样进行定位:
element = driver.find_element_by_name('login')
通过XPath定位
XPath是用于在XML文档中查找节点的语言,由于XML可以是HTML的实现,因此Selenium用户可以利用这种强大的语言来定位其Web应用程序中的元素。XPath扩展了通过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>
我们可以这样进行定位:
user_element = driver.find_element_by_xpath("/html/body/form/input[@name='username']")
或者
user_element = driver.find_element_by_xpath("/html/body/form/input")
或者
user_element = driver.find_element_by_xpath('//input[1]')
或者
user_element = driver.find_element_by_xpath("//input[@name='username'][@type='text']")
通过链接内容定位
当你知道链接元素的内容时,你可以使用它,使用此策略,将返回链接内容与该匹配到的第一个元素。如果没有元素匹配到此链接内容,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
<html> <body> <p>Are you sure you want to do this"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>
元素可以这样定位:
element = driver.find_element_by_link_text('Continue')
或者
element = driver.find_element_by_partical_link_text('Con')
通过标签名称定位
当你知道标签的名称时,你可以使用它,使用此策略,将返回标签名称与该匹配到的第一个元素。如果没有元素匹配到此标签名称时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
<html> <body> <h1>Welcome</h1> <p>Site content goes here.</p> </body> <html>
我们可以这样对<p>
元素进行定位:
element = driver.find_element_by_tag_name("p")
通过类名进行定位
当你知道类名的时候,你可以使用它,使用此策略,将返回类名与该匹配到的第一个元素。如果没有元素匹配到此类名称时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
我们可以这样对<p>
元素进行定位:
element = driver.find_element_by_class_name('content')
通过CSS选择器进行定位
当你想通过CSS选择器语法找到一个元素时,你可以使用它,使用此策略,将返回匹配CSS选择器的第一个元素。如果没有元素匹配到此CSS选择器时,将会引发NoSuchElementException错误,举个栗子,有这样一个数据源:
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
我们可以这样对<p>
元素进行定位:
element = driver.find_element_by_css_selector('body p')
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python Socket编程技巧总结》、《Python URL操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
Selenium,定位元素
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]