定位到元素后获取其属性_Selenium界面自动化测试(4)(Python):元素定位及操作...

在操作Web元素之前,需要先找到该元素,这个查找的过程称之为元素定位。

Selenium支持8种元素定位方法:

  • ID:根据元素的id属性值来定位元素。

  • Name:根据元素的name属性值来定位元素。

  • Class Name:根据元素的class属性值来定位元素。不允许使用复合类名,即当时,不能使用“class-a class-b”来定位该元素,但可以使用“class-a”或“class-b”来定位。

  • Tag Name:根据元素的HTML标签名来定位元素。

  • CSS Selector:根据CSS选择器来定位元素。CSS选择器常用语法如下表所示:

64960dc045fc6910552834d94c48c17f.png

  • XPath:根据XPath表达式来定位元素。XPath全称XML Path Language,即XML路径语言,其常用语法如下表所示:

1aa5bd46c0c54b221609ccac53317e44.png

  • Link Text:根据超链接文本来定位元素。其基于XPath定位。

  • Partial Link Text:根据超链接中的部分文本来定位元素。其基于XPath定位。

By类中有8个类变量分别用于表示以上8种元素定位方法,然后结合WebDriver对象的find_element或find_elements方法使用,前者返回WebElement对象,后者返回WebElement列表对象。WebElement对象表示单个元素,WebElement列表对象表示一组元素。

一旦定位到了元素,即可对元素进行操作,比如输入文本、点击、获取文本等。

find_element和find_elements方法是WebDriver基类提供的,如果使用Chrome、Firefox等WebDriver的子类时,还可以调用诸如find_element_by_css_selector之类的快捷方法,可避免使用By类。

如果您还没部署IMS,请参考“Dubbo接口自动化测试(2):部署示例应用程序”。

以登录IMS为例演示元素定位及操作:

from time import sleepfrom selenium.webdriver import Chromefrom selenium.webdriver.common.by import Bywith Chrome() as driver:    driver.get('http://localhost:9002/login')    # 使用WebDriver基类的方法    username = driver.find_element(By.CSS_SELECTOR, "input[type='text']")    username.send_keys('zhangsan')    # 使用WebDriver子类Chrome的方法    password = driver.find_element_by_css_selector("input[type='password']")    password.send_keys('zhangsan123456')    button = driver.find_element_by_class_name('el-button')    button.click()    sleep(1)    expected_element = driver.find_element_by_css_selector('#nav > div:nth-child(2) > span')    assert expected_element.text == 'zhangsan'

以上代码分别使用send_keys和click方法进行了输入文本和点击的操作,并访问了WebElement对象的text属性获取元素的文本。在点击了登录按钮后,加了1秒的等待时间,否则有可能IMS首页还未加载完成,导致无法对IMS首页上的元素进行操作。

由于以上WebElement对象仅使用了一次,因此可以简化代码,比如将:

username = driver.find_element(By.CSS_SELECTOR, "input[type='text']")username.send_keys('zhangsan')

修改为:

driver.find_element(By.CSS_SELECTOR, "input[type='text']").send_keys('zhangsan')

除了以上介绍的send_keys和click方法,以及text属性,WebElement对象还可以进行更多操作,比如is_selected、is_enabled和is_displayed方法分别用于检验元素是否选中、检验元素是否启用和检验元素是否显示。

 在实际项目中,经常需要遍历一组元素,并从该组元素中找到指定需求的某个元素。比如登录IMS后,在IMS首页的列表中查找是否存在MacBook Air电脑:

goods = driver.find_elements_by_css_selector('tbody > tr')exist = Falsefor good in goods:    if good.find_element_by_class_name('el-table_1_column_2').text == 'MacBook Air':        exist = True        breakassert exist

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

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

相关文章

数据库定时导出和互备一例

环境:内网中有三台服务器做测试用,两台SUSE LINUX 10 和一台RHEL 5.5,都安装有ORACLE11G 需求:测试环境搭建完毕,因没有外部存储进行统一备份而修改和更新又比较频繁,所以需要在三台服务器间搭建互备以实现…

芯片公司急聘嵌入式软件精英人才

薪酬待遇及联系方式薪酬待遇:40~150万不等,另有股票期权等,待遇丰厚,详细面议工作地点:北京市朝阳区联系人:杨先生微信:MichaelYao7PS:推荐成功入职者有推荐费嵌入式软件工程师岗位职…

Python进程学习笔记-multiprocessing模块

如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择。由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序? 由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨…

这一年就要过去

「远方钟声响起,这一年就要过去,快乐时光不停留......」楠哥从幼儿园新学习了一首新年小曲。今年已经是12月份了,2021年就要结束,即将到来的是2022年的新的一年。2021年这一年里非常感谢读者的一路支持,当然这不是一篇…

Android 更改签名

本文来自:安卓航班网 签名和发布应用程序 要想使Android应用程序在真机上运行,需要对apk(Android应用程序的执行文件,相当于Symbian程序的sis/sisx或Java ME程序的jar文件)文件进行签名。可以通过命令行或ADT…

unc 隐藏共享文件夹_你真的了解任务栏吗?win10任务栏居然隐藏了这么多小窍门...

平常使用电脑,最常用的是桌面,桌面上最常用的大约是任务栏,但是你真的了解任务栏吗?除了一小部分朋友熟悉之外,大部分人估计都是没有留意到,其实任务栏就功能角度来说,的确算一个宝藏之地。什么…

c#调api串口通讯

c#调api串口通讯 原文:c#调api串口通讯在调试ICU通信设备的时候,由于串口通信老出现故障,所以就怀疑CF实现的SerialPort类是否有问题,所以最后决定用纯API函数实现串口读写。先从网上搜索相关代码(关键字:C# API 串口&…

手机充电IC设置电流与实测电流不一致问题剖析

大家好,我是写代码的篮球球痴,转一篇我朋友记得诚的文章本文转载来自一位基带大佬,解决问题的思路很重要。原文链接:https://blog.csdn.net/AirCity123/article/details/104428325?spm1001.2014.3001.5502某手机的充电架构如下&a…

今天面试了家公司

2011-07-08 不知不觉,做管理软件已经四五年了,今天面试了家做多媒体的公司,感觉不错,想转去做多媒体。转载于:https://blog.51cto.com/3298226/606809

checkbox居中 editor_radio 或 CheckBox 关联 其他元素 整体选择

场景: list组件中,每一行 需要显示多个radio 或者 checkBox,并且每一行显示选择的类型都不一样!radio 或checkBox 的选择数据源是存放另一个data组件中!! 思路:正常的想法是每一行放一个radioGr…

Spring系列(六) Spring Web MVC 应用构建分析

DispatcherServlet DispatcherServlet 是Spring MVC的前端控制器名称, 用户的请求到达这里进行集中处理, 在Spring MVC中, 它的作用是为不同请求匹配对应的处理器, 将结果传递给视图解析器最终呈现给客户端. 前端控制器模式(Front Controller Pattern)是…

做个好人,加个晚班

我和建平在腾讯加班的日子前几天,他让我给他发照片,因为公司里年末要发照片墙,他说要把我的和他的照片放上去,然后我硬是找了几张觉得不错的给他,然后他也真的放上去了。再看那些照片,拍出来的效果都不咋样…

使用use index优化sql查询

转自:http://www.cnblogs.com/edwardlost/archive/2010/12/31/1923105.html 先看一下arena_match_index的表结构,大家注意表的索引结构 CREATE TABLE arena_match_index ( tid int(10) unsigned NOT NULL DEFAULT 0, mid int(10) unsigned NOT NULL …

中ridge_10种线性代数在数据科学中的强大应用(内附多种资源)

原文选自 | Analytics Vidhya作者 | Khyati Mahendru本文转载自 TalkingData数据学堂 ,未经允许禁止转载本文摘要线性代数为各种各样的数据科学算法和应用提供支持在这里,我会向您介绍通过线性代数帮助您成为更好的数据科学家的10种实际应用我们已将这些…

排序算法之冒泡排序(JAVA)

//冒泡排序算法 平均时间复杂度 O(n*n) 稳定的排序算法 下面的是改进版的冒泡排序算法,使用exchange 标志位进行控制 public class bubbleSort { public static void bubbleSort(int[] data) { int i 0; int j 0; int tmp 0; int len …

C语言中变量的储存类别

C语言中变量的储存类别C语言中变量的储存类别1.动态存储方式与静态动态存储方式:从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。静态存储方式:是指在程序运行期间分配固定的存储空间的…

语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍

设计模式是什么俗话说:站在别人的肩膀上,我们会看得更远。设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性,也更易于复用的软…

blog发布测试

blog发布测试转载于:https://www.cnblogs.com/aj407blogs/p/9736120.html

字符串2在字符串1中第一次出现的位置strstr()

//字符串2在字符串1中第一次出现的位置,采用遍历的思想,移动str1的位置与str2进行匹配char *strstr(const char *str1, const char *str2) {int i 0;if (NULL str1){return NULL;}if (NULL str2){return (char *)str1;}if (*str2 ! \0){while (*str1 …

苦练IoT应用开发,还能加速变现,这个机会别错过

都说人间大事,不过吃喝二字。厨房经济近年来显示出了巨大发展潜力,智能厨电已成为潮流趋势。智慧厨电究竟是如何——让厨房小白做出一顿可口大餐?让懒人摆脱厨房油烟和洗碗的困扰?让怕冷的人喝到永远55℃的热水?……在…