Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Selenium元素定位

Selenium元素定位

作者头像
Altumn
发布于 2019-10-21 08:39:22
发布于 2019-10-21 08:39:22
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

Selenium常用的8种元素基本定位方式

find_element_by_id() find_element_by_name() find_element_by_class_name() find_element_by_tag_name() find_element_by_link_text() find_element_by_partial_link_text() find_element_by_xpath() find_element_by_css_selector() 在这里将对各种元素定位方式统一使用百度首页进行示例,详细操作步骤有以下内容: 1.打开浏览器,进入百度首页(www.baidu.com); 2.百度页面输入关键字 www.testclass.cn 进行搜索; 3.关闭浏览器; 首先,通过前端工具(火狐浏览器的Firebug)或者直接按F12进入开发者模式查看具体前端代码:

find_element_by_id()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
#www.testclass.cn
#Altumn
#2018-11-13
from selenium import webdriverimport timedriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://www.baidu.com")driver.find_element_by_id("kw").send_keys("www.testclass.cn")#通过id属性定位输入框;
driver.find_element_by_id("su").click()#通过id属性定位“百度一下”查询按钮;

time.sleep(2)
driver.quit()

find_element_by_name()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
#www.testclass.cn
#Altumn
#2018-11-13
from selenium import webdriverimport timedriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://www.baidu.com")driver.find_element_by_name("wd").send_keys("www.testclass.cn")#通过name属性定位输入框;
driver.find_element_by_id("su").click()time.sleep(2)
driver.quit()

find_element_by_class_name()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
#www.testclass.cn
#Altumn
#2018-11-13
from selenium import webdriverimport timedriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://www.baidu.com")driver.find_element_by_name("wd").send_keys("www.testclass.cn")
driver.find_element_by_class_name("s_btn").click()#通过class name属性定位“百度一下”查询按钮;
time.sleep(2)
driver.quit()

以下几种定位方式通过定位下图input标签的输入框示例:

find_element_by_tag_name

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_tag_name("input")#通过tag name属性定位input输入框;

find_element_by_xpath()

通过xpath定位,xpath定位有N种写法,这里列几个常用写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
driver.find_element_by_xpath("/html/body/form/span/input")
driver.find_element_by_xpath("//span[@class='soutu-btn']/input")
driver.find_element_by_xpath("//form[@id='form']/span/input")
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']")

xpath定位,具有[相对路径][据对路径]的区别: 相对路径:即相对于上下文节点的路径; 绝对路径:即从根目录开始的完整的路径;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_xpath('//input[@id="kw"]').send_keys("www.testclass.cn")#相对路径
driver.find_element_by_xpath('//input[@name="wd"]').send_keys("www.testclass.cn")#相对路径
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']").send_keys("www.testclass.cn")#相对路径
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("by_xpath相对路径") #相对路径
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input').send_keys("www.testclass.cn")#绝对路径
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input[@id="kw"]').send_keys("www.testclass.cn")#绝对路径

find_element_by_css_selector()

通过css定位,css定位有N种写法,这里列几个常用写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector("[name=wd]")
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("html > body > form > span > input")
driver.find_element_by_css_selector("span.soutu-btn> input#kw")
driver.find_element_by_css_selector("form#form > span > input")

css定位,同样具有[相对路径][据对路径]的区别: 相对路径:即相对于上下文节点的路径; 绝对路径:即从根目录开始的完整的路径;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#by_css_selector #绝对路径
driver.find_element_by_css_selector('html>body>div>div>div>div>div>form>span>input[id="kw"]').send_keys("www.testclass.cn")
#绝对路径#by_css_selector #相对路径
driver.find_element_by_css_selector('input[id="kw"]').send_keys("www.testclass.cn")#相对路径
driver.find_element_by_css_selector("#kw").send_keys("www.testclass.cn")#相对路径

find_element_by_link_text()

通过find_element_by_link_text()定位下图百度首页上的一组文本链接。

find_element_by_link_text()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_link_text("新闻").click()
driver.find_element_by_link_text("网页").click()

find_element_by_partial_link_text()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_partial_link_text("新").click()
driver.find_element_by_partial_link_text("乐").click()
driver.find_element_by_partial_link_text("页").click()

Selenium通过elements复数定位

find_elements_by_name() find_elements_by_class_name() find_elements_by_tag_name() find_elements_by_link_text() find_elements_by_partial_link_text() find_elements_by_xpath() find_elements_by_css_selector() 复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list队列.我们可以通过选择具体第几个元素进行单个元素定位; 百度首页右上角有新闻、hao123、地图、视频、贴吧、学术一些文字链接,查看源码可以发现,这些链接都有共同的class,class=”mnav”。接下来我们通过find_elements_by_class_name()进行元素定位;

详细元素定位代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8

#www.testclass.cn
#Altumn
#2018-11-13
from selenium import webdriverimport timedriver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
driver.maximize_window()

#定位一组元素;
elements=driver.find_elements_by_class_name("mnav")
print(len(elements))

#循环打印出每个元素的属性值;
for i in range(len(elements)):
   print("第" + str(i) + "个元素")
   print(elements[i].get_attribute("name"))
   print(elements[i].get_attribute("class"))

输出结果如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS C:\Users\WangXiao\Desktop\mystuff> cd 'C:\Users\WangXiao\Desktop\mystuff'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.7.1\pythonFiles\PythonTools\visualstudio_py_launcher.py' 'C:\Users\WangXiao\Desktop\mystuff' '63291' '34806ad9-833a-4524-8cd6-18ca4aa74f14' 'RedirectOutput,RedirectOutput' 'c:\Users\WangXiao\Desktop\mystuff\elements.py'DevTools listening on ws://127.0.0.1:12164/devtools/browser/06ead576-8801-4f73-8cd9-38ec1678e2d96第0个元素
tj_trnews
mnav
第1个元素
tj_trhao123
mnav
第2个元素
tj_trmap
mnav
第3个元素
tj_trvideo
mnav
第4个元素
tj_trtieba
mnav
第5个元素
tj_trxueshu
mnav

这样你就可以通过元素的属性值判断你要定位的元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_elements_by_class_name("mnav")[0].click()#点击“新闻”;
driver.find_elements_by_class_name("mnav")[1].click()#点击“hao123”;
driver.find_elements_by_class_name("mnav")[2].click()#点击“地图”;
driver.find_elements_by_class_name("mnav")[3].click()#点击“视频”;
driver.find_elements_by_class_name("mnav")[4].click()#点击“贴吧”;
driver.find_elements_by_class_name("mnav")[5].click()#点击“学术”;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试testclass 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python+Selenium笔记(十):元素等待机制
(一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败。这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待和显式等待两种机制。 (二) 隐式等待 一旦设置隐式等待时间,就会作用于这个WebDriver实例的整个生命周期(对所有的元素查找都生效),设置隐式等待时间后,Webdriver会在一定时间内持续检测和搜寻DOM,以便于查找一个或多个不是立即加载成功并可用的元素。隐式等待的默认时间是0. WebDriver使用
free赖权华
2018/04/27
3K0
Selenium2+python自动化38-显示等待(WebDriverWait)
前言: 在脚本中加入太多的sleep后会影响脚本的执行速度,虽然implicitly_wait()这种方法隐式等待方法随时一定程度上节省了很多时间。 但是一旦页面上某些js无法加载出来(其实界面元素经出来了),左上角那个图标一直转圈,这时候会一直等待的。 一、参数解释 1.这里主要有三个参数: class WebDriverWait(object):driver, timeout, poll_frequency 2.driver:返回浏览器的一个实例,这个不用多说 3.timeout:超时的总时长 4.po
上海-悠悠
2018/04/08
1.3K0
Selenium2+python自动化38-显示等待(WebDriverWait)
自动化-Selenium 3-常用API(Python版)
ActionChains类提供的鼠标事件常用方法(perform()执行所有ActionChains中存储的行为):
wangmcn
2022/07/22
1.4K0
自动化-Selenium 3-常用API(Python版)
Selenium系列(六) - 详细解读强制等待、隐式等待、显式等待的区别和源码解读
https://www.cnblogs.com/poloyy/category/1680176.html
小菠萝测试笔记
2020/06/09
4.3K1
Selenium常用的元素等待方法
日常的UI自动化测试,单步调试的时候元素可以定位到,并且可以正常操作,但是在跑测试案例流程的时候反而报错。这时就需要考虑是否界面的切换,或者功能的跳转缓慢导致元素未加载完成就执行了操作,所以我们需要加上元素等待。WebDriver提供了几种类型的等待:强制等待、显式等待和隐式等待。
Altumn
2019/10/21
1.7K0
selenium&appium中的三种等待方式---基于python
我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait()、隐式等待implicitly_wait()、强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别
测试开发社区
2019/09/20
1.7K0
Python selenium — 一定要会用selenium的等待,三种等待方式解读
很多人在群里问,这个下拉框定位不到、那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了。
Python疯子
2018/09/06
2.1K0
知否知否-----selenium知多少
关于selenium,就不多介绍什么了,主要就是用来进行自动化的工具。怎样进行自动化,这才是它大放异彩的地方。下面就来看看吧!
我被狗咬了
2019/09/23
5320
知否知否-----selenium知多少
Selenium自动化测试-设置元素等待
使用sleep,需先导入time模块,import time, 然后使用time.sleep()来让程序等待多久。
可可的测试小栈
2019/11/14
1.8K0
Selenium自动化测试-设置元素等待
使用sleep,需先导入time模块,import time, 然后使用time.sleep()来让程序等待多久。
王大力测试进阶之路
2020/03/10
1.5K0
爬虫之Selenium的等待及定位
关于昨天的机器学习文章,希望能够亲自码一下,将会学到很多东西,如果觉得很好,欢迎转发,谢谢! 有关翻译贡献,可点击公众号右下角联系我,备注:翻译,或者昨日文章的阅读原文,pr到仓库中来! 关于今天的爬虫文章,则是一篇之前练习爬虫碰到的问题解决策略,希望可以帮助大家,下面一起来看吧,欢迎留言与转发!
公众号guangcity
2019/09/20
9980
爬虫之Selenium的等待及定位
Python:Selenium中三种等待方法说明
强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。
Python学习者
2023/06/18
6620
Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了。
软件测试君
2022/12/05
3.1K0
Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待
Selenium必须掌握的元素定位方法
Web端的UI自动化测试,目前使用比较多的就是Python+Selenium。当前一些UI自动化测试工具也是基于Selenium做开发的。 最近经常有童鞋后台询问selenium元素定位方法,其实网上学习资料很多,只要你肯动手,都可以搜的到。元素定位对于自动化测试来说是比较重要而且繁琐的一件事。接下来就来讲一下如何使用webdriver提供的基本元素定位方法。 再次声明:本站点已经和百度、必应、谷歌等各大搜索引擎达成长期的战略合作协议,你有任何疑问都可以通过以上公司提供的免费服务得到解答。
Altumn
2019/10/20
4.8K0
selenium 的显示等待与隐式等待
现在很多的网页都采用了 Ajax 技术,那么采用一般的静态爬虫技术会出现抓取不到页面的元素。比如歌曲的主页会有评论数量,一般评论数量是动态加载的。 所以这就涉及到selenium,支持各种浏览器,包括Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。
张凝可
2019/08/22
3.6K0
Selenium之操作浏览器、元素等待、窗体切换和弹窗处理
由于现在web端页面提供了更丰富的鼠标交互方式,因此,在做UI自动化的过程中可能会用到鼠标的右击、双击、悬停、甚至是鼠标拖动等功能。这些在WebDriver 中都是支持的,基于鼠标的相关操作方法都封装在ActionChains类中。
小博测试成长之路
2021/03/08
2K0
Selenium之操作浏览器、元素等待、窗体切换和弹窗处理
《selenium2 python 自动化测试实战》(6)——打印信息和设置等待时间
打印信息经常用的有两个: # coding: utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 打印网页标题 title = driver.title print title # 打印当前url curr = driver.current_url print curr 打印显示为: 我们打印这些东西不是为了给自己看,而是为了做断
孟船长
2018/05/18
1.2K0
python selenium2示例 - 同步机制
前言 在使用python selenium2进行自动化测试实践的过程中,经常会遇到元素定位不到,弹出框定位不到等等各种定位不到的情况,在大多数的情况下,无非是以下两种情况: 1、有frame存在,定位前,未switch到对应的frame内 2、元素未加载完毕(从界面看已经显示),但DOM树还在load状态或在加载js 那对于这类情况,怎么解决呢? 通俗的讲法: 等待。 高大上点:解决自动化测试代码与浏览器加载渲染之间的同步问题。 下面我们分段讲述各种处理方式: 一 强制等待 这种方式简单粗暴直接有效,不
苦叶子
2018/04/04
8860
python selenium2示例 - 同步机制
Selenium
元素定位可以根据id,class等属性定位,也可以根据标签名等信息进行定位。使用定位函数后会返回一个WebElement类或一个WebElement类的列表,用于接下来的操作。
TomatoCool
2023/07/31
2400
Selenium 元素checkbox元素操作与元素等待
检测百度页面搜索按钮是否存在,存在就输入关键词“自学网 Selenium” 然后点击搜索
清风穆云
2021/08/09
1.6K0
推荐阅读
相关推荐
Python+Selenium笔记(十):元素等待机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验