当前位置: 首页 > news >正文

selenium_常用方法

元素定位呢,是定位到你要处理的元素,常用法法呢,是你要对它做的一些操作,点击、双击、输入内容等,
元素定位+常用方法===UI自动化

基本常用方法、特殊元素定位、frame操作、上传附件操作、cookie操作、selenium帮助文档

1、基本方法

1)send_Keys方法:模拟键盘输入
driver.find_element_by_id("kw").send_keys("python")2)text方法:获取你定位的文本
driver.find_element_by_link_text("新闻").text
(3)get_attribute();获取元素value属性的值
driver.find_element_by_id("su").get_attribute("value")4)maximize_window():浏览器窗口最大化
driver.maximize_window()5)current_window_handle:返回窗口句柄,意思就是标识窗口的字符串。
driver.current_window_handle
(6)current_url:获取当前窗口URL,
driver.current_url
(7)is_selected():判断是否被选择,如果多选框是被选中,则true
find_element_by_id("xx").is_selected()8)is_enabled():如果元素可用,则true
find_element_by_id("kw").is_enabled()9)is_displayed():如果元素在页面显示,则true
find_element_by_id("kw").is_displayed()10)clear():清空输入框
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("kw").clear()11)quit():关闭浏览器并杀掉chromedriver.exe进程。不开这个,后台会有很多exe进程
(12)title:获取页面“title”,百度首页的title是“百度一下,你就知道”
driver.title
(13)refresh():刷新界面
driver.refresh()14)back():浏览器工具栏向后操作,比如:访问百度首页并后退到空页面:
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()15)forward():浏览器工具栏向前操作,跟上面的相反,如下又跑到了百度网页
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()
driver.forward()

2、特殊元素定位
(1)鼠标悬停操作
selenium中将键盘鼠标封装在action china类中,主要有单击、双击、拖拽等\

click() # 单击
click_and_hold()#单击并且按住不放
double_click()#双击
context_click()#右击
drag_and_drop(source,target)#拖拽
drag_and_drop(source,xoffset,yoffset)#将目标拖拽到目标位置
key_down(value,element=None)#按住某键,实现快捷操作
key_up()#松开某键
move_to_element(to_element)#将鼠标移动到某个元素上
move_to_element_with_offset(to_element,xoffset,yoffset)#移动到指定坐标
perform()#执行前面的一系列actionchains。
release()#释放按下的坐标

参考,定位设置,并进行鼠标悬浮后,
定位到搜索设置并点击

#coding=utf-8
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
bg_config = driver.find_element_by_id("s-usersetting-top")
ActionChains(driver).move_to_element(bg_config).perform()
driver.find_element_by_link_text("搜索设置").click()
driver.quit()

(2)select操作
三种:select_by_index、select_by_value、select_by_visible_text,第三种用的比较多,可维护性好,第一种也不错,第二种也不错,我习惯用第3种

#coding=utf-8
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
bg_config = driver.find_element_by_id("s-usersetting-top")
ActionChains(driver).move_to_element(bg_config).perform()
driver.find_element_by_link_text("搜索设置").click()
time.sleep(3)
# 定位到下拉框
se = driver.find_element_by_id('nr')
# 选择元素
Select(se).select_by_visible_text('每页显示20条')
driver.quit()

对返回项(options)的3种处理方法:

# 返回选中的内容
ops = Select(se).all_selected_options
for i in ops:
    print(i.text)
# 返回所有的内容
ops = Select(se).options
for i in ops:
    print(i.text)
# 返回第一个被选中的选项
ops = Select(se).first_selected_option
for i in ops:
    print(i.text)

(3)利用javascript操作页面元素
webdriver对部分浏览器上的控件并不是直接支持的,如:右侧滚动条、副文本等,而是借助js间接操作,
webdriver提供了2种:
execute_script():同步执行代码
execute_async_script():异步执行代码
在这里插入图片描述
要实现在百度搜索框输入selenium,完整代码如下:

#coding=utf-8
from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
js = 'document.getElementById("kw").value="selenium"'
driver.execute_script(js)
driver.quit()

用js实现对浏览器滚动条的操作

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.set_window_size(800,700)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
js = "window.scrollTo(100,300)"
time.sleep(2)
driver.execute_script(js)
time.sleep(2)
driver.quit()

(4)jQuery操作页面元素
jquery是javascript的类库,元素定位的强力补充,打通了元素定位的任督二脉。具体参考jquery选择器即可,不过现在用xpth的比较多,可以复制绝对路径后,是真的舒服。

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.set_window_size(800,700)
jq = "$('#kw').val('selenium')"
driver.execute_script(jq)
time.sleep(2)
driver.quit()

(5)常用的键盘事件

Keys.BACK_SPACE #删除键
Keys.SPACE #空格键
Keys.TAB #TAB键
Keys.BACKSPACE #会推键
Keys.CONTROL,"a" #ctrl+a
Keys.CONTROL,"c" #ctrl+c
Keys.CONTROL,"v" #ctrl+v
Keys.CONTROL,"x" #ctrl+x
Keys.F1 #F1键
Keys.F12 #f12

输入selenium,并删除m

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)
# driver.find_element_by_id("kw").send_keys("selenium"+Keys.BACKSPACE)

driver.quit()

(5)Frame操作
frame标签有三类:frameset、frame、iframe,其中frameset不需要切换切换框架。iframe、frame需要切换内这个框内才能定位到元素
登录QQ邮箱为例子,如图:

#coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
driver.find_element_by_id('u').send_keys('test')
quit()

报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[id=“u”]"}
原因:用户名嵌套在iFrame框架内,定位元素,发现上一曾有frame,frame的属性值id=‘login_frame’

修改后:
#coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
driver.switch_to.frame('login_frame')
driver.find_element_by_id('u').send_keys('test')
quit()
print('test finished')

在这里插入图片描述
如果要去框架外面定位,则返回驱动:

driver.switch_to.default_content()

说几个对frame定位的方式:
(1)通过index定位:

driver.switch_to.frame(0)0代表第一个frame

(2)通过name属性定位:

driver.switch_to.frame('login_frame')

(3)通过webelement定位:

driver.switch_to.frame(driver.find_elements_by_id('login_frame'))

(6)上传附件操作
selenium本身无法识别windows窗口,举例三种上传方式:
第一种
定位“添加附件”
在这里插入图片描述

如果元素标签是input类型且type值是file,代码:
driver.find_element_by_name('UploadFile').send_keys('D:\\python\\chengdu.zip')

第二种:
借助第三方库pywinauto,它是界面操作的工具类库,专门处理widows GUI,只能用在windows

from pywinatuo.applicaton import Application
# 定位到窗口
app = app.connect(title_re="打开",clsaa_name="#32770")
# 设置文件路径
app["打开"]["EDit1"].SetDditText("D:\soft\ip.txt")
time.sleep(2)
# 单击按钮
app["打开"]["Button1"].click()
print("end")

第三种:
用autoit实现,它是basic语言开发的对windows进行自动化模拟操作的工具。可以和所有标准widows控件进行交互,脚本可以变成可执行的程序,易于移植,可以创作图形化界面,可以调用windows API函数
此处不做介绍,重点掌握第二种即可

(7)cookie操作【用的不多,详细的内容以后用到了再补充吧】
selenium提供了读取、添加、删除cookie的操作
add_cookie(name)
delete_all_cookie()
delete_cookie(name)
get_cookie(name):返回名为name的cookie信息
get_cookies():返回当前会话的所有cookie信息

(8)selenium帮助文档
暂无

相关文章:

  • selenium_其他方法
  • python与selenium_项目篇_项目实战、代码优化、项目重构
  • selenium+pytest自动化测试框架FAQ
  • python与selenium_项目篇_数据驱动测试
  • python与selenium_项目篇_page object设计模式(项目框架)
  • python与selenium_项目篇_行为驱动测试(BDD)
  • git相关(安装、配置、拉取提交代码)
  • python与selenium_平台篇_docker容器技术与多线程测试
  • python_类and对象
  • 记录我定位了2天的bug,坚持下去,问题终究会解决。
  • python_函数_参数(args、*args、**kwargs)
  • python与selenium_强制等待、隐性等待、显性等待
  • python_日志相关
  • jenkins总结1 - 安装、git、allure、email插件配置
  • pytest框架_简介、pytest.main()
  • Angular4 模板式表单用法以及验证
  • co.js - 让异步代码同步化
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • js算法-归并排序(merge_sort)
  • MQ框架的比较
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vuex 笔记整理
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 使用agvtool更改app version/build
  • 数组的操作
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一些关于Rust在2019年的思考
  • 以太坊客户端Geth命令参数详解
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • (12)Hive调优——count distinct去重优化
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (TOJ2804)Even? Odd?
  • (笔试题)分解质因式
  • (分布式缓存)Redis分片集群
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (强烈推荐)移动端音视频从零到上手(下)
  • (学习日记)2024.01.09
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)nsfocus-绿盟科技笔试题目
  • .gitignore文件---让git自动忽略指定文件
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net Stream篇(六)
  • .NET(C#) Internals: as a developer, .net framework in my eyes