Selenium 常用函数总结

news/2024/5/20 21:51:39/文章来源:https://blog.csdn.net/wx17343624830/article/details/128418991

Seleninum作为自动化测试的工具,自然是提供了很多自动化操作的函数,
下面列举下个人觉得比较常用的函数,更多可见官方文档:
官方API文档:
http://seleniumhq.github.io/selenium/docs/api/py/api.html

1) 定位元素

find_element_by_class_name:根据class定位
find_element_by_css_selector:根据css定位
find_element_by_id:根据id定位
find_element_by_link_text:根据链接的文本来定位
find_element_by_name:根据节点名定位
find_element_by_partial_link_text:根据链接的文本来定位,只要包含在整个文本中即可
find_element_by_tag_name:通过tag定位
find_element_by_xpath:使用Xpath进行定位

PS:把element改为elements会定位所有符合条件的元素,返回一个List
比如:find_elements_by_class_name

2) 鼠标动作

有时需要在页面上模拟鼠标操作,比如:单击,双击,右键,按住,拖拽等
可以导入ActionChains类:selenium.webdriver.common.action_chains.ActionChains
使用ActionChains(driver).XXX调用对应节点的行为

click(element):单击某个节点;
click_and_hold(element):单击某个节点并按住不放;
context_click(element):右键单击某个节点;
double_click(element):双击某个节点;
drag_and_drop(source,target):按住某个节点拖拽到另一个节点;
drag_and_drop_by_offset(source, xoffset, yoffset):按住节点按偏移拖拽
key_down:按下特殊键,只能用(Control, Alt and Shift),比如Ctrl+C
ActionChains(driver).key_down(Keys.CONTROL).send_keys(‘c’).key_up(Keys.CONTROL).perform();
key_up:释放特殊键;
move_by_offset(xoffset, yoffset):按偏移移动鼠标;
move_to_element(element):鼠标移动到某个节点的位置;
move_to_element_with_offset(element, xoffset, yoffset):鼠标移到某个节点并偏移;
pause(second):暂停所有的输入多少秒;
perform():执行操作,可以设置多个操作,调用perform()才会执行;
release():释放鼠标按钮
reset_actions:重置操作
send_keys(keys_to_send):模拟按键,比如输入框节点.send_keys(Keys.CONTROL,’a’)
全选输入框内容,输入框节点.send_keys(Keys.CONTROL,’x’)剪切,模拟回退:
节点.send_keys(keys.RETURN);或者直接设置输入框内容:输入框节点.send_keys(‘xxx’);
send_keys_to_element(element, *keys_to_send):和send_keys类似;

3) 弹窗

对应类:selenium.webdriver.common.alert.Alert

如果你触发了某个时间,弹出了对话框,可以调用下述方法获得对话框:
alert = driver.switch_to_alert(),然后可以调用下述方法:

accept():确定
dismiss():关闭对话框
send_keys():传入值
text():获得对话框文本

4)页面前进,后退,切换

driver.switch_to_window(driver.window_handles[1])#切换窗口
driver.forward() #前进
driver.back() # 后退
#打印当前url
print(driver.current_url)

5) 页面截图

driver.save_screenshot(“截图.png”)

6)设置代理

from selenium import webdriver
options.add_argument("--proxy-server=http://101.37.118.54:8888")
driver_path = r'D:/chromedriver/chromedriver.exe'
driver = webdriver.Chrome(executable_path=driver_path,options=options)
driver.get("http://httpbin.org/ip")

7) 页面等待

现在的网页越来越多采用了 Ajax技术,这样程序便不能确定何时某个元素完全
加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的
代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。

为了避免这种元素定位困难而且会提高产生 ElementNotVisibleException的概率。
所以 Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。

显式等待:

显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有
找到元素,那么便会抛出异常了。

from selenium import webdriver
from selenium.webdriver.common.by import By
#WebDriverWait 库,负责循环等待from selenium.webdriver.support.ui import WebDriverWait
#expected_conditions 类,负责条件出发from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.PhantomJS()
driver.get("http://www.xxxxx.com/loading")
try:# 每隔10秒查找页面元素 id="myDynamicElement",直到出现则返回element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:driver.quit()

如果不写参数,程序默认会 0.5s 调用一次来查看元素是否已经生成,
如果本来元素就是存在的,那么会立即返回。

下面是一些内置的等待条件,你可以直接调用这些条件,而不用自己
写某些等待条件了。

title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present

隐式等待:

隐式等待比较简单,就是简单地设置一个等待时间,单位为秒。

from selenium import webdriverdriver = webdriver.PhantomJS()
driver.implicitly_wait(10) # seconds
driver.get("http://www.xxxxx.com/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

当然如果不设置,默认等待时间为0。

8).执行JS语句

driver.execute_script(js语句)
#比如滚动到底部:
js = document.body.scrollTop=10000
driver.execute_script(js)

9).补充

 # 找到“嵌套”的iframe
iframe = driver.find_element_by_xpath('//iframe')    # 切换到iframe
driver.switch_to.frame(iframe)     # 切换到iframe获取元素标签的内容(文本信息):
get_attribute(‘textContent’)获取元素内的全部HTML:
get_attribute('innerHTML')获取包含选中元素的HTML:
get_attribute('outerHTML')

资源分享【这份资料必须领取~

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Fragment

Fragment简单认识 1.简介 在大屏幕设备上支持更加动态和灵活的UI设计就是一种卡片的设计思路一个Activity可以有多个Fragment,一个Fragment可以被多个Activity使用可以进行动态的添加,替换和删除Fragment有着自己的生命周期,同时受到Activity…

Shiro之授权

授权 1、角色认证 在controller层创建接口 使用shiro中的注解RequiresRoles指定能访问的角色名称 /*** 登录认证角色*/ RequiresRoles("admin") GetMapping("/userLoginRoles") ResponseBody public String userLoginRoles(){System.out.println("…

微信键盘终于正式发布,张小龙说:其目的并不是为了抢夺输入法市场

自从2021年1月份,张小龙在微信公开课透露:微信将上线属于自己的专属输入法,到现在已经快2年过了。 今天终于正式发布了,下面我们一起来体验下。 1、安装 打开App Store,输入“微信键盘”,点击获取就可以…

基于Springboot+Mybatis+mysql+element-vue高校就业管理系统

基于SpringbootMybatismysqlelement-vue高校就业管理系统一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息(学生端)4.我的应聘(学生端)5.学生信息管理(辅导员)6.三方协议书审核(辅导员&am…

一文读懂Linux内核处理器架构中的栈

栈是什么?栈有什么作用? 首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据…

自学编程和计算机科班出身的差别在哪里

前不久逛知乎的时候看到一个问题:自学编程和计算机科班出身的差别在哪里? 自己回答了一下,获得了比较多的点赞和评论,在这里也分享给大家。 985 通信专业学长,转行程序员,聊一聊我的看法:说一千…

YOLOV3论文学习

YOLOv3论文链接:https://pjreddie.com/media/files/papers/YOLOv3.pdf 综述 一、摘要 1、320*320的YOLOv3推理时间22ms,准确率28.2mAP,达到了SSD的精确度,推理速度却快了三倍。 2、基于.5mAp Iou 的YOLOv3的检测效果还比较不错&a…

Doo Prime 为泰国 SOS 儿童村送温暖,公益有起点爱心无疆界

一年一度的圣诞节即将来临,在这欢乐的时刻, Doo Prime 荣幸地宣布 ,向泰国 SOS 儿童村捐赠了 35 万泰铢 ( 约合 1.23 万美元 ),作为泰国南部城市合艾府 SOS 儿童村的房屋翻修费用。 Doo Prime 希望 SOS 儿童村的孩子们都能在温馨…

Android入门第55天-在Android里使用OKHttp组件访问网络资源

简介 今天的课程开始进入高级课程类了,我们要开始接触网络协议、设备等领域编程了。在今天的课程里我们会使用OKHttp组件来访问网络资源而不是使用Android自带的URLConnection。一个是OKHttp组件更方便二个是OKHttp组件本身就带有异步回调功能。 下面就进入课程。…

(Java)车厢重组

车厢重组一、题目描述二、输入格式三、输出格式四、样例(1)样例输入(2)样例输出五、正确代码六、思路一、题目描述 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最…

Fragment案例

Fragment案例 1.案例要求 框架布局项目难点:1 导航栏的实现,显示导航按钮、切换Fragment 2 每个Fragment的创建、显示 3 Fragment的跳转(从新闻列表到新闻详情,再返回) 涉及的技术:用RadioGroup及RadioButt…

【源码共读】Vite 项目自动添加 eslint 和 prettier

vite-pretty-lint库是一个为Vite创建的Vue或React项目初始化eslint和prettier的库。 该库的目的是为了让开发者在创建项目时,不需要手动配置eslint和prettier,而是通过vite-pretty-lint库来自动配置。 源码地址: vite-pretty-lintgithub1s…

3ds Max:标准几何体

三维软件中一般有许多非常复杂的命令,能够完成非常复杂的图形运算,但其实许多绚丽的图形也是由最基本的几何体构成,许多复杂的命令也是基本的运算程序的集合,就像是砖块,构成了复杂的大厦。任何一个几何体,…

【Linux】缓冲区/磁盘inode/动静态库制作

目录 一、缓冲区 1、缓冲区的概念 2、缓冲区的意义 3、缓冲区刷新策略 4、同一份代码,打印结果不同 5、仿写FILE 5.1myFILE.h 5.2myFILE.c 5.3main.c 6、内核缓冲区 二、了解磁盘 1、磁盘的物理结构 2、磁盘的存储结构 2.1磁盘的定位 3、磁盘的抽象…

Sentinel系列——概述与安装1-1

Sentinel系列——概述与安装1-1概述服务雪崩解决方法基本概念资源规则Sentinel 是如何工作的安装Sentinel下载地址启动修改sentinel启动参数设置启动端口设置用户名密码概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言…

java开发的环保网站垃圾分类系统源码

本项目是基于springboot开发的小区垃圾分类的监管系统。为了更好的督促小区业主更好的进行垃圾分类和垃圾投放,本系统设计了一套积分奖罚机制,如果业主此次投放垃圾符合分类要求则加10积分,不符合则扣除200积分,积分不够需要进行扫…

Zookeeper 4 Zookeeper JavaAPI 操作 4.1 Curator 介绍 4.2 Curator API 常用操作【建立连接】

Zookeeper 【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.1 Curator 介绍4.1.1 Curator 介绍4.2 Curator API 常用操作4.2.1 Curator API 常用操作4.2.2 建立连接4 Zookeeper JavaAPI 操作 4.1 Curator 介绍…

spring提前加载,懒加载,bean的作用域和注入注解讲解

前言 sping知识随笔笔记;spring提前加载,懒加载,bean的作用域和注入注解讲解 这里写目录标题前言1 depends-on2 bean的作用域3 lazy-init 懒加载4 Autowrite和Resource的区别和使用1 depends-on depends-on 是提前加载,比如在实…

《北京市数字经济促进条例》图解来了

《北京市数字经济促进条例》 2023/1/1 二十大对建设数字经济作出重要部署。党的二十大报告中指出,“加快建设网络强国、数字中国”、“加快发展数字经济,促进数字经济和实体经济深度融合,打造具有国际竞争力的数字产业集群”。习总书记强调…

eclipse和sts安装lombok

eclipse和sts安装lombok 说明 sts 是 eclipse集成springboot的开发环境 所以 sts 和 eclipse 安装 lombok 步骤基本一样 参考网址: https://blog.csdn.net/qq_39826207/article/details/119007580?ops_request_misc%257B%2522request%255Fid%2522%253A%252216708973141680…