Python+Selenium+Unittest框架使用——Selenium——定位元素(二)
1、定位元素(id、name、class、link、partial link)
(1)find_element_by_id()
用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”,【百度一下】按钮的id为“su”。
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("python") #输入框输入“python”
driver.find_element_by_id("su").click() #点击【百度一下】按钮
(2)find_element_by_name()
用百度定位测试,用firebug查看定位元素 ,输入框的name为“wd”,【百度一下】按钮没有name属性,这里用id定位,id为“su”。
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_name("wd").send_keys("python") #输入框输入“python”
driver.find_element_by_id("su").click() #点击【百度一下】按钮
(3)find_element_by_class_name()
百度的class属性值是包含空格,用class无法定位百度。这里我改用bing搜索为测试实例,用firebug查看定位元素 ,输入框的class为“b_searchbox”,搜索按钮的class为“”b_searchboxSubmit“”
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://cn.bing.com/")
driver.find_element_by_class_name("b_searchbox").send_keys("python") #输入框输入“python”
driver.find_element_by_class_name("b_searchboxSubmit").click() #点击【百度一下】按钮
(4)find_element_by_link_text()
find_element_by_link_text()是根据链接的文本来定位。以百度为定位测试,找百度页面“新闻”这个元素
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_link_text("新闻").click() #打开新闻链接
(5)find_element_by_partial_link_text()
find_element_by_partial_link_text()是根据链接的文本包含某个字符来定位。以百度为定位测试,找百度页面“新闻”中的“闻”:
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_partial_link_text("闻").click() #打开新闻链接
2、xpath定位元素
(1)通过绝对路径定位。一般很少用这种绝对路径定位,除非其他定位元素无法准确定位,才会用到。
用百度定位测试,用firebug和firepath查看定位元素 ,输入框的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[1]”,【百度一下】按钮的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input”。
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[1]").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input").click()
通过以上代码去执行,找不到输入框位置。是因为输入框定位位置不准确。firebug和firepath只是辅助工具,有时会出错,需要更新手动定位。
所以输入框的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input”,【百度一下】按钮的绝对路径为“html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input”。
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("html/body/div[1]/div[1]/div/div[1]/div/form/span[2]/input").click()
(2)简化xpath
WebDriver ELement Locator定位神器,可以快速定位。点鼠标右键
a.通过元素属性进行定位-id
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("//input[@id='kw']").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("//input[@id='su']").click() #点击【百度一下】按钮
b.通过元素属性进行定位-name
from selenium import webdriver #导入selenium的webdriver包
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("//input[@name='wd']").send_keys("python") #输入框输入“python”
driver.find_element_by_xpath("//input[@id='su']").click() #点击【百度一下】按钮
还有很多定位没有讲,掌握以上定位可以满足工作需求,不需要大家全部掌握。后续我会再补充。
Python+Selenium+Unittest框架使用——Selenium——定位元素(二)的更多相关文章
- Python+Selenium+Unittest框架使用——Selenium——模拟操作浏览器(三)
1.浏览器大小的控制 Set_window_size()是控制浏览器大小 Maximize_window()浏览器全屏显示 from selenium import webdriver #导入sele ...
- selenium + python自动化测试unittest框架学习(一)selenium原理及应用
unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻. ...
- selenium + python自动化测试unittest框架学习(二)
1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...
- python之unittest框架实现接口测试实例
python之unittest框架实现接口测试实例 接口测试的方法有很多种,具体到工具有postman,jmeter,fiddler等,但是工具的局限性是测试数据的组织较差,接口的返回工具的判断有限, ...
- selenium + python自动化测试unittest框架学习(三)webdriver元素定位(一)
1.Webdriver原理 webdirver是一款web自动化操作工具,为浏览器提供统一的webdriver接口,由client也就是我们的测试脚本提交请求,remote server浏览器进行响应 ...
- selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)
上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw") ...
- python selenium --unittest 框架
转自:http://www.cnblogs.com/fnng/p/3300788.html 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习sele ...
- python+selenium基础篇,By定位元素
1.By定位和find_element_by_XXXXXX是一样的,如下图所示,定位元素的方法都是一样的 2.使用By定位代码如下所示 from selenium import webdriver f ...
- 一:unittest框架配合selenium工具之CSS_selector定位。
做了自动化测试这么久了,一直没有梳理到元素定位这一块的内容,其重要性不言而喻.趁着周末有时间,梳理一下. 1,通过id定位 driver.find_element_by_css_selector(&q ...
随机推荐
- JSX有感
开发一个网页,我们要写视图部分HTML,也要写交互逻辑JS. 写JS时,不断翻看HTML,确保querySelector能取到期望的元素. 改HTML时,一个个排查JS文件,确保其没受影响. -- 类 ...
- Fiddler-抓取手机app请求
如何使用 Fiddler 抓取手机app请求? 前提:手机和电脑在同一局域网 1.设置 Fiddler>Tools>Options>Connections 勾选 Allow remo ...
- python selenium while 循环
while True: try: loadmore = browser.find_element_by_xpath('//div[@class="right"]/div[@clas ...
- 1 Openwrt无线中继设置并访问外网
https://www.cnblogs.com/wsine/p/5238465.html 配置目标 主路由器使用AP模式发射Wifi 从路由器使用Client模式接受Wifi 从路由器使用Master ...
- Unity3D介绍
Unity3D介绍:Unity3D是一个游戏开发引擎 由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具 ...
- Win 7/10 安装Oracle 11g
两个系统安装oracle的过程基本一致,注意安装时选桌面类(没有试过server,只有server类的操作系统选择server类) 安装过程:https://jingyan.baidu.com/alb ...
- MySQL函数--(1)
/*函数与存储过程的区别1.存储过程:可以有0个返回值,可以有多个返回值函数:有且仅有一个返回值*/ #创建语法create FUNCTION 函数名(参数列表) return 返回类型BEGIN函数 ...
- 数据转换失败 java.math.BigDecimal cannot be cast to java.lang.String
从接口获取到数据,在转换的时候出现错误:java.math.BigDecimal cannot be cast to java.lang.String 因为一开始用的是使用关键字进行强制转换,后来发现 ...
- centos7之openvpn搭建
一.环境介绍 操作系统centos7.4 openvpn版本:openvpn-2.1 lzo版本:lzo-2.03 二.搭建 关闭firewalld防火墙,并设置开机不启动.关闭selinux sys ...
- python之单例模式、栈、队列和有序字典
一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...