首页 > 编程语言 >Selenium + Python 自动化测试03(元素定位)

Selenium + Python 自动化测试03(元素定位)

时间:2024-08-04 20:52:33浏览次数:16  
标签:03 name 定位 Python 元素 Selenium element id find

        上一篇我们讲述了第一个测试用例脚本的编写。我们对web自动化测试有了一个初步的认识。接着我们详细讲述元素定位方法。

        Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,定位元素方法总结归纳一下:8种基本元素定位方式:保证定位到唯一性是目的,这样在执行中才不会出错。

1、8种定位方法:

1)id 定位

2)name 定位

3)class 定位

4)link_text 定位

5)partial_link_text 定位

6)CSS 定位

7)Xpath 定位

8)tag_name 定位

2、如何查看元素

      这里以Chrome 浏览器来讲述。

1)先打开要定位元素的网页

2)F12查看到元素结构

如下图,展示本页面所有的元素

3)找到对应控件元素

每个元素都有不同的标签名和属性值。点击输入框-右击-查看

4)查看对应元素的描述

对应下图就展示对应元素的层级位置,以及元素的属性

我们把输入框的元素复制出来,就是有id,name,class 和对应属性值。希望详细了解的可以参考前端HTML的基础知识。

<input class="input_error form_input" placeholder="Username" type="text" data-test="username" id="user-name" name="user-name" autocorrect="off" autocapitalize="none" value="">

3、定位方法实践

        3.1、id定位

以下图输入框为例,对应的元素id的名字是:id="user-name"

#输入用户名
        
 driver.find_element_by_id("user-name").send_keys(username) # by id 定位

3.2、name 定位

和id的类似,就不赘述

对应的元素name的名字是:name="user-name"

driver.find_element_by_id("user-name").send_keys(username) # by id 定位

3.3、class 定位

和id的类似,就不赘述

对应的元素name的名字是:class="input_error form_input"

driver.find_element_by_class_name("input_error form_input").send_keys(username)   # by class 定位

3.4、link_text 定位

link_text 是以超链接全部名字作为关键字来定位元素的。以百度首页“新闻”超链接为例,如下图 1.所示,关键字为“新闻”。

<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>

对应元素的target:新闻

#定位link_text
driver.find_element_by_link_text("新闻").click() #通过link_text

3.5、partial_link_text 定位

是link_text 定位的一种补充,有些文本链接比较长,这个时候我们可以取其中一部分进行定位。

如类似上面的例子:上面百度的新闻使用“新”定位

driver.find_element_by_partial_link_text("新").click() #通过partial_link_text定位

3.6、CSS 定位

CSS :cascading style sheets 是一种语言,它用来描述HTML 、XML文档的表现。CSS通过选择器为页面元素绑定属性。

  1)通过class属性定位:点号(".")表示通过class属性定位

元素:  <input class="u-btn mart5" type="submit" οnclick="return User.check()" value="登录">
定位写法:driver.find_element_by_css_selector(".u-btn.mart5").click()

  2)通过id属性定位:("#")表示通过id定位元素

driver.find_element_by_css_selector("#loginName")

  3)通过其他属性定位:("[]"),中括号里的属性可以唯一标识这个元素就可以;属性的值可以加引号,也可以不加

元素: <input class="u-btn mart5" type="submit" οnclick="return User.check()" value="登录">
写法: driver.find_element_by_css_selector("[type=submit]").click()

  4)组合定位

       平时使用生成的xpath,id,name,classname这些比较多,我们当然可以把上面的定位策略组合起来使用,这就大大加强了定位元素的唯一性。如下:

driver.find_element_by_css_selector("form.fm>span>input.s_ipt")

3.7Xpath 定位

1)特点:

通过 XPath 来定位元素的方式,对比较难以定位的元素来说很有效,几乎都可以解决,特别是对于有些元素没有 id、name 等属性的情况。

XPath 是 XML Path 语言的缩写,是一种用来确定 XML 文档中某部分位置的语言。它在 XML 文档中通过元素名和属性进行搜索,主要用途是在 XML 文档中寻找节点。XPath定位比 CSS 定位有更大的灵活性。XPath 可以向前搜索也可以向后搜索,而 CSS 定位只能向前搜索,但是 XPath 定位的速度比 CSS 慢一些。

XPath 语言包含根节点、元素、属性、文本、处理指令、命名空间等。

2)定位策略-绝对路径

通过写出元素的绝对路径来定位:

绝对路径可以通过下面的方法copy出来,是不是很方便!

选中元素-右击-copy-copy Xpath:

也可以手写,就是按层级结构写下来。

对照层级写绝对地址:driver.find_element_by_xpath("/html/body/div/div/div[2]/div/div/div/div/input")

3)定位策略-相对地址

//表示相对的位置,再加一些限定的属性值来定位到元素:页面相对复杂度高的时候这个就比较有用。

如下通过相对位置的id值://*[@id='user-name'] 

driver.find_element_by_xpath("//*[@id='user-name']").send_keys(username)  #通过xpath定位

3.8、tag_name 定位

HTML 的本质就是通过tag 来实现不同功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag唯一识别某个元素的概率比较低。用的相对比较少。

如下图:定位标签“form”并打印标签属性值“name”。

str=driver.find_element_by_tag_name("form").get_attribute("name") #获取form名字
print(str)

两外,现在有另一种写法。用By定位元素

  除find_element_by_***这种方式,还有另一套写法,也就是统一调用find_element()方法,两个参数,第一个参数是定位的类型,由By提供;第二个参数是定位的具体值。例子如下:

from selenium.webdriver.common.by import By     #使用By这种定位前要将By类导入

find_element(By.ID,"loginName")
find_element(By.NAME,"SubjectName")
find_element(By.CLASS_NAME,"u-btn-levred")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,"退出")
find_element(By.PARTIAL_LINK_TEXT,"退")
find_element(By.XPATH,".//*[@id='Title")
find_element(By.CSS_SELECTOR,"[type=submit]")

以上就是我这边了解的定位元素的方法了,麻烦各位大佬不吝赐教。谢谢!

标签:03,name,定位,Python,元素,Selenium,element,id,find
From: https://blog.csdn.net/weixin_45999406/article/details/140909016

相关文章

  • Python pymodbus类库使用学习总结
    实践环境Python3.9.13https://www.python.org/ftp/python/3.9.13/python-3.9.13-amd64.exepymodbus-3.6.8-py3-none-any.whlhttps://files.pythonhosted.org/packages/35/19/a9d16f74548d6750acf6604fa74c2cd165b5bc955fe021bf5e1fa04acf14/pymodbus-3.6.8-py3-none-any.whl......
  • 【秋招笔试】2024-08-03-科大讯飞秋招笔试题(算法岗)-三语言题解(CPP/Python/Java)
    ......
  • Python 爬虫项目实战(一):破解网易云 VIP 免费下载付费歌曲
    前言网络爬虫(WebCrawler),也称为网页蜘蛛(WebSpider)或网页机器人(WebBot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓取等。爬虫的基本原理种子URL:爬虫从一个或多个种子URL开始,这些URL是起点。发送请求:爬虫向这些种......
  • python常用绘图操作
    1.turtle绘制奥运五环图importturtleaspdefdrawCircle(x,y,c='red'):p.pu()#抬起画笔p.goto(x,y)#绘制圆的起始位置p.pd()#放下画笔p.color(c)#绘制c色圆环p.circle(30,360)#绘制圆:半径,角度p.pensize(3)#画笔尺寸设置3drawCircle(0,0,'b......
  • 【学习笔记】Matlab和python双语言的学习(蒙特卡洛法)
    文章目录前言一、蒙特卡洛二、经典示例:计算圆周率π1.代码实现----Matlab2.代码实现----python三、示例2:三门问题1.代码实现----Matlab2.代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1E......
  • python-查找元素3(赛氪OJ)
    [题目描述]有n个不同的数,从小到大排成一列。现在告诉你其中的一个数x,x不一定是原先数列中的数。你需要输出最后一个<=x的数在此数组中的下标。输入:输入共两行第一行为两个整数n、x。第二行为n个整数,代表a[i]。输出:请你输出最后一个<=x的数在此数组中的下标。样例输入1541......
  • Python3 第六十一课 -- 实例三十
    目录一.堆排序二.计数排序一.堆排序堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。defheap......
  • Python3 第六十课 -- 实例二十九
    目录一.冒泡排序二.归并排序一.冒泡排序冒泡排序(BubbleSort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名......
  • 使用python对Excel表格某个区域保存为图片
    实际工作中,我们经常会把表格某个区域(如:A1:F5)或某个图形保存为图片,如何用python自动做到这一点?不知屏幕前的小伙伴有没有遇到过类似的需求,此刻脑海里有木有一丢丢思路。python操作excel的第三方库有很多,个个都有各自的绝招和擅长的应用场景,简单罗列一下:pyexcel:pyexcel是......
  • Python Matplotlib Quiver 绘制向量场
    我正在尝试使用Matplotlib的quiver函数绘制引力矢量场,我有一个函数可以计算由任意数量的质量引起的引力场,但是在绘制它时,我在质量位置周围得到了奇怪的结果。出于矢量绘图的目的,该函数返回x和y方向上的场分量、它们的x和y坐标以及2D场数组,这对于绘图不是必需的,但对......