selenium界面元素定位

一、        Selenium界面元素定位

本文元素定位以das2为例

#导入包

from selenium import  webdriver

#打开火狐驱动

driver=webdriver.Firefox()

#访问网址

driver.get("http://192.168.3.217:8080/das/seatlogin.jsp ")

 

进行web页面自动化测试,对页面上的元素进行定位和操作是核心,对页面元素的定位是进行自动化测试的基础

 

1.       常用的八种元素属性:

 

    id

    name

    class name

    tag name

    link text

    partial link text

    xpath

    css selector

 

对应于webdriver中的定位方法分别是:(定位一个元素的方法)

 

    driver.find_element_by_name()——最常用,简单

    driver.find_element_by_id()——最常用,简单

    driver.find_element_by_class_name()

    driver.find_element_by_tag_name()——最不靠谱

    driver.find_element_by_link_text()——定位文字连接好用

    driver.find_element_by_partial_link_text()——定位文字连接好用

    driver.find_element_by_xpath()——最灵活,万能

    driver.find_element_by_css_selector()

用xpath定位是最好用的最万能的

webdriver也有定位一组元素的方法:

 

    driver.find_elements_by_name()

    driver.find_elements_by_id()

    driver.find_elements_by_class_name()

    driver.find_elements_by_tag_name()

    driver.find_elements_by_link_text()

    driver.find_elements_by_partial_link_text()

    driver.find_elements_by_xpath()

    driver.find_elements_by_css_selector()

 

总结:定位一组元素和一个元素在语法上是将element修改为elements,而生成的是一个符合元素的list

 

查看元素的方法可以使用firefox安装组件firebug

 

以das登录界面的用户名密码输入框为例

 

2.       通过id进行定位

 

 

 

    语法:driver.find_element_by_id(self,id)

   举例:driver.find_element_by_id("username").send_keys("yangdanhua")

即取id元素,传值“yangdanhua”

 

    语法:driver.find_element(self,by,value)

    举例:driver.find_element(by="id",value="username").send_keys("yangdanhua ")

   

3.       通过name进行定位

 

 

 

    语法;driver.find_element_by_name(self,name)

    举例:driver.find_element_by_name("j_username").send_keys("yangdanhua")

   

    语法:driver.find_element(self,by,value)

    举例:driver.find_element(by="name",value=" j_username ").send_keys("yangdanhua ")

 

4.       通过class定位

    语法;driver.find_element_by_class_name(self,name)

    举例:driver.find_element_by_class_name("s_ipt").send_keys("VseYoung")

 

5.       通过tag定位

    一般页面上标签一样的很多,通过标签无法直接定位到某个元素

    通常用于定位一组元素,很难通过标记tag name去区分不同原色

    

 

    语法;driver.find_element_by_tag_name(self,name)

   

    举例:driver.find_element_by_tag_name("input").send_keys("VseYoung")

 

6.       通过link定位

    主要用于文字链接的定位,准确度较高,比如下图

 

 

  语法;driver.find_element_by_link_text(self,link_text)

   

    举例:driver.find_element_by_link_text("文件查询").click()

 

7.       通过xpath定位

    XPath是一种文档定位语言。因为HTML可以看做是XML的一种实现,所以selenium用户可使用这种强大的语言在web应用中定位。

    绝对路径方法:

        从根元素写起,当元素层级很深的时候,路径写的会很长,阅读性不好,也很难维护。不建议使绝对路径这样的方法。

    相对路径方法:

        通过Firebug很容易得到相对路径的xpath,打开Firebug插件,在页面上的搜索文本框,就可以显示出xpath了:

 

//表示当前页面某个目录下,input 表示定位元素的标签名,[@id=‘kw’] 表示这个元素的id 属性值等于kw;如果不想指定标签名也可以用星号(*)代替,.表示当前节点。

 

 

按F12,点击红框内的小箭头,选中用户名输入框,下方元素中的input部分被标蓝,右键标蓝区域,选择复制xpath路径

 

语法;driver.find_element_by_xpath(self,xpath)

举例:driver.find_element_by_xpath("//*[@id=’username’]").send_keys("yangdanhua")

   

    driver.find_element_by_xpath("//*[@id='kw']").click()

    详解:通过xpath寻找,任意(*代表)id属性为username的元素

 

    根据上级目录的属性来定位当前元素:

    driver.find_element_by_xpath("//span[@id=’input-container’]/input")    #通过上一级目录的id 属性定位 

    driver.find_element_by_xpath("//div[@id=’hd’]/form/span/input")        #通过上三级目录的id 属性定位 

    driver.find_element_by_xpath("//div[@name=’q’]/form/span/input")       #通过上三级目录的name 属性定位 

 

8.       通过css定位

    使用firepath组件即可查询相关元素的CSS定位

CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML 和XML 文档的表现

可选中元素查看器后右键复制css路径或css选择器

 

 

通过id定位:

 

    语法:driver.find_element_by_css_selector(self,css_selector)

举例:driver.find_element_by_css_selector("#username").send_keys("yangdanhua")

 

通过class定位:

 

 

         举例:driver.find_element_by_css_selector("li#usernamew>span.lb").text()

 

9.       通过partial link text定位

    partial link text定位与link text的区别在于,partial link text定位时,只需要输入文字链接的部分内容即可完成定位

        语法;driver.find_element_by_partial_link_text(self,link_text)

    举例:driver.find_element_by_partial_link_text("新").click()

 

二、        Das2实战演练

1.       创建新py文件

打开pycharm,右键文件夹,创建一个新的python文件,命名为“测试专用”

 

 

 

2.       模块导入

Selenium模块导入语言:

 

from selenium import webdriver

 

即从selenium框架中导入webdriver模块

3.       访问界面

创建一个对象driver,调用webdriver的firefox方法,启动火狐浏览器

浏览器加载das2的urlhttp://192.168.3.217:8080/das/seatlogin.jsp

 

driver = webdriver.Firefox()
# 打开url
driver.get("http://192.168.3.217:8080/das/seatlogin.jsp")

 

#后面为注释内容,方便代码走查

4.       登录界面

创建参数username、password,通过find_element_by_id函数定位界面元素id。

为防止传参时有默认文本框内容,先通过clear方法清除内容。

将参数username、password传至文本框。

传参完毕,定位到登录按钮的界面元素id,调用click方法

由于登录界面时有一定加载时长,我们用sleep方法来等待来2s,在进行下一步操作

 

#登录操作
username = "yangdanhua"
password = "123456"
# 执行登录操作
#用户名的定位
driver.find_element_by_id("username").clear()  #清除输入框默认的信息
driver.find_element_by_id("username").send_keys(username)
#密码的定位
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys(password)
# 点击登录
driver.find_element_by_id("btn_login").click()
time.sleep(2)

 

 

5.       进入查询页

调用find_element_by_link_text函数定位'文件查询',前面讲过了是文本元素专用,调用click方法点击,即可跳转'文件查询'表单。

调用find_element_by_link_text函数定位'疑义复核文件状态',调用click方法点击,即可跳转'疑义复核文件状态'表单。

 

# 点击文件查询
driver.find_element_by_link_text('文件查询').click()
# 点击文件状态查询
driver.find_element_by_link_text('疑义复核文件状态').click()

 

6.       提取表格元素

这里要注意,是否是iframe元素,可在界面上,右键空白处查看元素,或直接搜索iframe,如果是iframe, 说明遇到了表单嵌套界面,无法直接在该界面下定位元素,此处我用的解决方法是右键蓝色下划线区域,复制链接,通过get方法跳转到该链接

 

 

调用driver.find_element_by_xpath函数传参xpath路径获取文件状态列表的第一行,

,可右键查看第一行的元素,复制xpath路径/html/body/div/div/div/div[1]/table/tbody/tr[1]

创建一个空列表list_all,遍历第一行表单中的内容,调用text方法输出内容,列表list_all调用append方法将表单的第一行按顺序增加在自身列表中

 

# 由于是iframe类型的,要先获取iframe内的链接并访问
driver.get("http://192.168.3.217:8080/das/das/yiyifuhe/toFileStatusSearchPageFileStates.action")list_testfile = driver.find_element_by_xpath('/html/body/div/div/div/div[1]/table/tbody/tr')
# 遍历列表
list_all = []
for x in range(1, 15):list = list_testfile.find_element_by_xpath('td[%s]' % x).textlist_all.append(list)

 

7.       添加断言

前面已将表单第一列内容放在list_all中了,我们希望表单的值与希望的一致,此时需要设置断言,使用方法assert,假如assert比较时发现实际与期望结果并不一致,程序会报错,不会继续往后走。若我们需要知道多个值是否正确,就需要设置异常。

可通过try except函数监控异常,若报错为AssertionError就输出'经销商名称错误'、'文件状态不对'、'dps状态错误'

 

# 设置断言,检查查询的内容是否正确
try:assert list_all[4] =='漳州市天健医药有限公司1'
except AssertionError as e:print('经销商名称错误')
try:assert list_all[7] == '文件数据质检中1'
except AssertionError as e:print('文件状态不对')
try:assert list_all[11]== '处理中'
except AssertionError as e:print('dps状态错误')
print("文件状态查询测试完毕")

 

 

 

七、关闭浏览器

前面的语句执行后不会自动关闭浏览区,需要通过close函数关闭

 

driver.close()

 

 

在pycharm上运行后得到结果为:

 

 

说明经销商名称和文件状态都是错误的

转载于:https://www.cnblogs.com/hhdw/p/10345998.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue.js ui_UI / UX开发:考虑Vue.js

vue.js uiBecause sometimes we have to add logic to our concepts, and Vue makes it a whole lot easier.因为有时我们必须在概念中添加逻辑,而Vue使其变得更加容易。 FULL DISCLOSURE: THIS IS NOT A COMPLETE JAVASCRIPT OR VUE COURSE. There’s no way I co…

Silverlight学习笔记十七BingMap(三)之地图的地区标识

如果我们需要在Bing Maps中加入一个小图钉标记&#xff0c;该如何实现了&#xff1f; Bing Maps控件已经为我们提供了这个功能&#xff0c;在Microsoft.Maps.MapControl名称空间下提供了实现图钉应用的图钉层Pushpin类用该类来实现普通标识 在Xaml中添加<map:Pushpin Locati…

win10查看pcie设备_壹拓网科技解密WIN10系统使用向日葵开机棒远程开机需要设置几个地方...

向日葵开机棒&#xff0c;是一款非常好用的远程智能远程开机硬件&#xff0c;它一头接网线&#xff0c;另外一头和被开电脑接在同一个路由器下&#xff0c;不需要和被开电脑或者设备直接连接&#xff0c;当然&#xff0c;被开电脑需要有线联网&#xff0c;暂时不支持使用无线方…

如何成为公司独当一面的工程师

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天推荐黄老师的这篇文章&#xff0c;你可能看到过了&#xff0c;但值得再看一遍。之前常有小伙伴问&#xff0c;大多情况下我都会分享这篇文章。点击下方卡片关注我、加个星标&#xff0c;或者…

flex如何做响应式设计_响应式设计-您做错了!

flex如何做响应式设计Responsive design is not just about the web that automatically adjusts to different screen resolutions and resizeable images, but designs that are crucial for web performance.自适应设计不仅涉及可自动适应不同屏幕分辨率和可调整大小图像的网…

30万手表推荐_今年六十岁生日,儿子说要送只30万的手表,请问有哪些推荐?...

关注腕表部落&#xff0c;尽享腕表生活一位读者向笔者提出这样一个问题&#xff1a;今年六十岁生日&#xff0c;儿子说要送只30万的手表&#xff0c;请问有哪些推荐&#xff1f;首先要恭喜这位老爷子&#xff0c;一来是生日马上就要到了&#xff0c;二来是还有这么孝顺而且慷慨…

写 Node.js 代码,从学会调试开始

大家好&#xff0c;我是若川&#xff08;点这里加我微信 ruochuan12&#xff0c;长期交流学习&#xff09;。今天推荐这篇调试文章&#xff0c;熟悉我的读者都知道我写的源码文章都多次强调要调试&#xff0c;而且写了调试方法。点击下方卡片关注我、加个星标&#xff0c;或者查…

创建用户友好的表单

Forms are a common way to engage with users and could be a user’s first impression of your product. Since forms aren’t always the user’s favourite thing, it is essential to make filling out forms as easy as possible. Let’s go over a few tips for creati…

细节决定成败—关于.net的.dll.refresh文件

一直在做.net的项目&#xff0c;c/s的、b/s的&#xff0c;一直没有注意这个东西。众所周知&#xff0c;.net的程序生成后会在bin目录下生成.dll文件&#xff0c;而.dll.refresh这个文件从何而来呢&#xff1f;那天无聊地google了下才知&#xff0c;这个东东是在你的项目中引用第…

环境在c盘_如何给女朋友解释为什么 Windows 上面的软件都把自己安装在 C 盘

本文经授权转载自漫画编程(ID&#xff1a;mhcoding)周末&#xff0c;我在家里面看电视&#xff0c;女朋友正在旁边鼓捣她的电脑&#xff0c;但是好像并不是很顺利&#xff0c;于是就有了以下对话。计算机存储我们使用的计算机中&#xff0c;保存信息的介质有两类&#xff1a;一…

能让你纵享丝滑的SSR技术,转转这样实践

大家好&#xff0c;我是若川&#xff08;点这里加我微信 ruochuan12&#xff0c;长期交流学习&#xff09;。今天推荐这篇图文并茂的SSR技术文章。这是江西前端群里一个小伙伴的文章。群里小伙伴很多都在知名大厂&#xff0c;但他们都很低调。点击下方卡片关注我、加个星标&…

魅族魅蓝mirror简单打开usb调试模式的步骤

经常我们使用安卓手机链接电脑的时候&#xff0c;或者使用的有些应用比如我们企业营销团队经常使用的应用引号精灵&#xff0c;以前使用的老版本就需要开启USB调试模式下使用&#xff0c;现经常新版本不需要了&#xff0c;如果手机没有开启USB调试模式&#xff0c;电脑则无办法…

hp-ux 单用户 启动_UX备忘单:搜索与浏览

hp-ux 单用户 启动重点 (Top highlight)When designing search results and interest sites, you have to keep in mind what ‘mode’ your user is in. Are they in ‘searching mode’ or ‘browsing mode’? This will help you determine how to design your platform to…

细数开源历史上的九个重大事件

开放源码&#xff08;开源&#xff09;的精神在于使用者可以使用、复制、散布、研究和改进软件。这可以追溯到20世纪60年代&#xff0c;至今已有半个世纪了。伯乐在线-职场博客的这篇文章将列举开源历史上的九大重要事件。虽然本文不是专门对开源产品&#xff0c;但还是说到了一…

有赞大数据平台安全建设实践

一、概述 在大数据平台建设初期&#xff0c;安全也许并不是被重点关注的一环。大数据平台的定位主要是服务数据开发人员&#xff0c;提高数据开发效率&#xff0c;提供便捷的开发流程&#xff0c;有效支持数仓建设。大数据平台的用户都是公司内部人员。数据本身的安全性已经由公…

请先设置tkk_理光MP2014扫描至文件夹的设置方法

理光旗下的2014系列入门级A3黑白复印机市场保有量较大&#xff0c;该系列机型加装M16网卡后可以方便的实现扫描至文件夹功能&#xff0c;经常有客户咨询该机型的扫描设置方法&#xff0c;下面我就以MP2014D为例来演示一下该机型的SMB扫描设置方法&#xff1a;首先是在电脑上建立…

听说现在都考这些React面试题

大家好&#xff0c;我是若川。最近刷脉脉看见圈里都在聊面试&#xff0c;吐槽最多的还是万年考点 React 和 Vue。不过关于两者的比较似乎有点针尖对麦芒的赶脚。确实&#xff0c;面试的偏重点往往映射公司对该框架的重视程度&#xff0c;但也不能一概而论&#xff0c;去学习或放…

荒岛余生为什么没有打开包裹_您会带到荒岛什么办公桌设置?

荒岛余生为什么没有打开包裹Throughout life, you experience a lot of desks and a lot of desk setups. Real or virtual, at the office or at home, temporal or permanent — just a way to call it, nothing is permanent— a big one with a great office view or a sma…

第五课 路由之初识路由

1.路由快速入门 1.1 概念 是指把数据从一个地方传送到另一个地方的行为和动作&#xff0c;而路由器&#xff0c;正是执行这种行为动作的机器。它的英文名称为Router&#xff0c;是一种连接多个网络或者网段的网络设备&#xff0c;它能将不同网络或者网段之间的数据信息进行“翻…

如何使用 React 和 React Hooks 创建一个天气应用

大家好&#xff0c;我是若川&#xff08;点这里加我微信 ruochuan12&#xff0c;长期交流学习&#xff09;。今天推荐一个练手的React项目&#xff0c;创建天气应用&#xff0c;相信很快能看完。昨天发送书掉粉18人&#xff0c;是我没想到的&#xff0c;送书一般是出版社按阅读…