自动化测试-selenium基础操作

news/2024/10/18 1:39:29/

元素操作

方法:
1.send_keys()  # 输入方法
2.click()  # 点击方法
3.clear()  # 清空方法
# 导包
from time import sleep
from selenium import webdriver# 实例化浏览器
driver = webdriver.Chrome()# 打开网址
driver.get('https://www.baidu.com/')# 需求
ele = driver.find_element_by_css_selector('#kw')
ele.send_keys('苹果15')
sleep(2)# 清空
ele.clear()
ele.send_keys('苹果16')# 时间轴看效果
sleep(3)# 关闭页面
driver.quit()

浏览器常用操作函数

# 方法
"""
1、driver.maximize_window()  # 最大化浏览器
2、driver.set_window_size(w,h)  # 设置浏览器大小 单位像素 【了解】
3、driver.set_window_position(x,y)  # 设置浏览器位置  【了解】
4、driver.back() # 后退操作
5、driver.forward() # 前进操作
6、driver.refrensh() # 刷新操作
7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
8、driver.quit() # 关闭driver对象启动的全部页面
9、driver.title # 获取当前页面title信息
10、driver.current_url # 获取当前页面url信息
应用:driver.maximize_windows()  # 窗口最大化driver.set_window_size(w,h) # 设置浏览器大小 【了解】driver.set_window_position(x,y) # 设置浏览器窗口位置 【了解】
"""1、driver.title 和 drivet.current_url是属性没有括号。应用场景:一般判断上不操作是否执行成功。2、driver.maximize_window() 一般为前置代码放到获取driver地址后,进行浏览器窗口的最大化3、driver.refresh() 向浏览器重新发出请求,刷新页面,在cookie 会用到4、driver.close() 和 driver.quit() 的区别:close():关闭当前主窗口
quit():关闭由driver对象启动的所有页面
如果只有一个窗口那么quit()和 close()没有区别。

获取元素信息操作

"""
方法:
1、text 获取元素的文本; 如:driver.text
2、size 获取元素的大小: 如:driver.size
3、get_attribute 获取元素属性值;如:driver.get_attribute("id") ,传递的参数是元素的属性名
4、is_displayed 判断元素是否可见 如:element.is_displayed()
5、is_enabled 判断元素是否可用 如:element.is_enabled()
6、is_selected 判断元素是否被选中 如:element.is_selected()"""

鼠标操作

利用selenium操作鼠标

其对应的类为
ActionChains类,实例化 鼠标对象

导包

from selenium.webdriver.common.action_chains import ActionChains

鼠标常用方法

"""
1、context_click(element) # 右击
2、double_click(element)  #双击
3、double_and_drop(source, target)  # 拖拽
4、move_to_element(element)  # 悬停 【重点】
5、perform()  # 执行上述的事件的方法 【重点】最后一步必须执行这个
"""

注意: selenium 框架虽然提供了 鼠标右键方法,但是没有提供选择右键菜单方法,可以通过键盘快捷键操作实现

键盘操作(不需要实例化对象)☆

1、键盘对应的方法在Keys类中

# 导包
from selenium.webdriver.common.keys import Keys

2、快捷键(这里只讲windows操作系统的快捷键):
CONTROL: Ctrl键

​ BACK_SPACE : 等价于 BACKSPACE (删除)
其他:可以查看其详细方法函数

"""
键盘简单操作
"""
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get('https://www.baidu.com/')ele = driver.find_element(By.ID, 'kw')
ele.send_keys('苹果15')
sleep(1)
ele.send_keys(Keys.BACK_SPACE)
sleep(1)
# 组合键 Ctrl + a 全选 ,注意这里的组合键都是小写
ele.send_keys(Keys.CONTROL, 'a')
sleep(1)
# 剪切
ele.send_keys(Keys.CONTROL, 'x')
sleep(1)
# 剪切之后的粘贴
ele.send_keys(Keys.CONTROL, 'v')sleep(3)driver.quit()

键盘类中的操作

# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License."""The Keys implementation."""class Keys:"""Set of special keys codes."""NULL = "\ue000"CANCEL = "\ue001"  # ^breakHELP = "\ue002"BACKSPACE = "\ue003"BACK_SPACE = BACKSPACETAB = "\ue004"CLEAR = "\ue005"RETURN = "\ue006"ENTER = "\ue007"SHIFT = "\ue008"LEFT_SHIFT = SHIFTCONTROL = "\ue009"LEFT_CONTROL = CONTROLALT = "\ue00a"LEFT_ALT = ALTPAUSE = "\ue00b"ESCAPE = "\ue00c"SPACE = "\ue00d"PAGE_UP = "\ue00e"PAGE_DOWN = "\ue00f"END = "\ue010"HOME = "\ue011"LEFT = "\ue012"ARROW_LEFT = LEFTUP = "\ue013"ARROW_UP = UPRIGHT = "\ue014"ARROW_RIGHT = RIGHTDOWN = "\ue015"ARROW_DOWN = DOWNINSERT = "\ue016"DELETE = "\ue017"SEMICOLON = "\ue018"EQUALS = "\ue019"NUMPAD0 = "\ue01a"  # number pad keysNUMPAD1 = "\ue01b"NUMPAD2 = "\ue01c"NUMPAD3 = "\ue01d"NUMPAD4 = "\ue01e"NUMPAD5 = "\ue01f"NUMPAD6 = "\ue020"NUMPAD7 = "\ue021"NUMPAD8 = "\ue022"NUMPAD9 = "\ue023"MULTIPLY = "\ue024"ADD = "\ue025"SEPARATOR = "\ue026"SUBTRACT = "\ue027"DECIMAL = "\ue028"DIVIDE = "\ue029"F1 = "\ue031"  # function  keysF2 = "\ue032"F3 = "\ue033"F4 = "\ue034"F5 = "\ue035"F6 = "\ue036"F7 = "\ue037"F8 = "\ue038"F9 = "\ue039"F10 = "\ue03a"F11 = "\ue03b"F12 = "\ue03c"META = "\ue03d"COMMAND = "\ue03d"ZENKAKU_HANKAKU = "\ue040"

元素等待

1、为什么需要元素等待?
由于电脑配置或者网络原因,在查找元素时,元素代码没有在第一时间被加载出来,而抛出异常
2、什么是元素等待

​ 元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。

3、元素等待分类

​ 隐式等待:针对全局元素生效;(讲这个)

​ 显示等待:稍微麻烦,有兴趣的可以下去了解,他是针对单个元素生效。

隐式等待
driver.implicitly_wait(30) # 一般情况下设置30秒除了这种方式也可以通过sleep方法

下拉框(需要实例化下拉框)

1、为什么单独使用下拉框
1)、如果option选项没有value值的化,css定位或其他定位就不太方便。
2、使用Select类

​ 1)、导包:from selenium.webdriver.support.select improt Select

​ 2)、实例化下拉框:s = Select(element)

​ 3)、调用方法:s.select_by_index()索引从0开始

3、Select类提供的方法

​ 1)、select_by_index() # 通过索引定位

​ 2)、select _by_value() # 通过value值

​ 3)、select_by_visible_text() # 显示文本

"""
Select类方法:
需要实例化下拉框元素定位
"""
from time import sleepfrom selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get('file:///E://code//SeleniumTest//aa.html')
ele = driver.find_element(By.ID, 'selectA')# 实例化下拉框
s = Select(ele)# index 索引方法
# 选择了索引为1的,索引从0开始
s.select_by_index(1)
sleep(2)# value 属性值选择目标元素
s.select_by_value('sz')
sleep(2)# text 采用文本的方式选择目标信息
s.select_by_visible_text('研究生')sleep(3)driver.quit()

前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>受教育程度:<select id="selectA"><option>小学</option><option >初中</option><option>高中</option><option value="sz">大专</option><option>本科</option><option>研究生</option><option>博士生及博士生以上</option>
</select>
</body>
</html>

弹出框

1、为什么要处理弹出框?

​ 一旦出现弹出框,如果不进行处理,则后续操作不可实现

2、前端实现弹窗分类

​ 系统弹窗:JS实现

​ 自定义弹窗:前端代码封装(使用各种成熟组件实现)

3、对话框的分类:

​ alert:警告框

​ confirm:确认框

​ prompt:提示框

4、如何处理

​ 系统弹窗:上面的对话框处理方式都一样;

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript">
function disp_prompt(){
<!--  prompt是JavaScript中一个重要的方法,它可以让我们在页面上弹出一个输入框,可以用来获取用户输入的数据-->var name=prompt("请输入您的名字","Bill Gates")if (name!=null && name!=""){document.write("你好!" + name + " 今天过得怎么样?")}}
</script>
</head>
<body><input id="but" type="button"  onclick="disp_prompt()" value="显示提示框" /></body>
</html>
"""
系统弹窗:
切换对话框:driver.switch_to.alert
同意:alert.accept()
拒绝:alert.dismiss()
"""
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get('file:///E://code//SeleniumTest//tankuang.html')
driver.implicitly_wait(30)ele = driver.find_element(By.ID, 'but')
ele.click()
# 定位到到弹窗
a = driver.switch_to.alertprint(driver)
# 获取弹窗的内容
print(a.text)# 触发取消按钮
a.dismiss()
sleep(2)# 同意
# a.accept()driver.quit()

自定义弹窗,由于可以鼠标右击检查选项获取元素信息,所以出现自行已弹窗的时候,直接定义目标元素,并进行移除操作即可。

滚动条

1、为什么要是用滚动条?

​ 在一些特殊场景中,一些按钮是在页面最下角,需要使用滚动条拉到最底层。

2、操作步骤
selenium操作滚动条的方法
Selenium框架中没有专门处理滚动条的方法,需要通过调用 Js 代码实现操作;

1)、第一步:设置操作滚动条操作语句:js_down=“window.scollTo(0,1000)”

​ > 0:为左边距-----》水平滚动条

​ > 1000: 为垂直滚动条

​ 2)、第二步:调用执行js方法,将设置js语句传入方法中

​ > 方法:driver.execute_script(js_down)


"""
滚动条:selenium中没有滚动条方法,需要js代码实现
1、准备js代码:"window.scrollTo(0, 1000)"
2、执行js代码:driver.execute_script(js的变量)
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()driver.get('https://blog.csdn.net/feiyu68/article/details/120928895')
sleep(2)
# 1、准备js代码
js_down = "window.scrollTo(0, 1000)"
# 2、执行js代码
driver.execute_script(js_down)sleep(3)driver.quit()

切换frame表单 (重点)

selenium操作frame
1、应用场景:

处于frame 中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,因此需要先切换到frame,再进行元素定位操作。

2、如何切换frame

方法:driver.switch_to.frame(“id/name/element”) 传入的是代表frame唯一的特征值


"""
frame的切换
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()driver.get('url')# 切换到frame
driver.switch_to.frame('idframe1')
# 在frame表单中填写信息
driver.find_element_by_id('userA').send_keys('admin')sleep(3)driver.quit()

连续切换frame

"""
需要默认切换到frame
方法:driver.switch_to.default_content()
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()driver.get('url')driver.switch_to.frame('idframe1')
driver.find_element_by_id('userA').send_keys('admin')driver.switch_to.default_content()
driver.switch_to.frame('myframe2')
driver.find_element_by_id('userB').send_keys('admin4')sleep(3)driver.quit()

多窗口切换

1、为什么要切换多窗口

页面是存在多窗口的,但是selenium默认焦点只会在主窗口上的所有元素,不切换窗口,就不能操作除主窗口以外的窗口内元素。

2、如何切换

每个窗口都有唯一的一个句柄值,那么我们就可以通过句柄值来完成窗口的切换操作

​ 方法:

​ 1)、driver.current_window_handle (获取当前的句柄值)

​ 2)、driver.window_handles ( 获取当前由driver启动所有窗口句柄)

​ 3)、driver.switch_to.window(handle) —> 切换窗口

"""
从百度搜索页面切换到百度账号注册页面,并进行注册
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
import timeurl = "https://www.baidu.com"
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(url)# 获取百度搜索窗口句柄
search_window = driver.current_window_handle
print(search_window)# 切换到注册界面
driver.find_element(By.ID,"s-top-loginbtn").click()
driver.find_element(By.ID,"TANGRAM__PSP_11__regLink").click()   # 此时有一个百度搜索页面,一个百度注册页面print("==========")
# 获取当前窗口的所有句柄
handles = driver.window_handles # 返回的是一个数组
print(handles)for handle in handles:if handle != search_window:driver.switch_to.window(handle) # 切换到注册页面print(driver.title) # 打印当前页面名称driver.find_element(By.NAME,"userName").send_keys("baidu")time.sleep(2)# 关闭当前窗口driver.close()# 返回搜索窗口
driver.switch_to.window(search_window)
print(driver.title)driver.quit()

截图操作

使用的方法:

driver.get_screenshot_as_file(imgepath)

参数:

imagepath:为图片要保存的目录地址及文件名称

"""
截图:driver.get_screenshot_as_file(imgepath)
"""
from time import sleepfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get('https://www.baidu.com/')driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys('苹果15')
# 截图方法,建议使用png格式 , ./为当前路径,  ../为上一级路径
driver.get_screenshot_as_file('./info.png')sleep(3)driver.quit()

验证码

1、什么是验证码?

​ 一种随机生成的信息(文字,数字,图片)

2、验证码的作用?

​ 防止恶意请求

3、验证码的处理

​ 这边讲的是cookie解决

4、使用cookie 登录

​ 客户端登录账号后,将登录状态的想关 cookie 信息发给服务器保存,再发送去请求,携带cookie信息如果跟服务器保留的一致,则服务器认为客户端是登录状态。

5、这里实现自动登录的功能

​ 1)、准备工作,在客户端登录的状态下,获取cookie字段
在这里插入图片描述
2、方法步骤:

1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
2、调用方法添加cookiedriver.add_cookie(cookie变量)
# 3、刷新页面 -->发送cookie给服务器验证driver.refresh()
"""
验证码:
{'name':'BDUSS',
'value':'............................'}
"""
from time import sleepfrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')
driver.maximize_window()# 1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
cookie_value = {'name':'BDUSS',
'value':'........................'}# 2、调用方法添加cookie
driver.add_cookie(cookie_value)# 3、刷新页面 -->发送cookie给服务器验证
driver.refresh()sleep(3)driver.quit()

学习链接


http://www.ppmy.cn/news/465058.html

相关文章

企业微信应用开发实践

一、开发者中心 https://developer.work.weixin.qq.com/document 二、管理后台&#xff1a; https://work.weixin.qq.com/ 三、企业内部应用开发 前提&#xff1a;域名已经备案&#xff0c;且在管理后台网页授权及JS-SDK可信域名已开启。 如果是JS-SDK开发&#xff0c;文…

极速解决“微信PC新版文件保存至MsgAttach”问题

微信PC新版3.7.0 以前&#xff0c;通过 微信 传输的文件都存在FileStorage/File目录下、按月份分文件夹存储&#xff0c;如下图中2022-05文件夹存着5月的所有文件。 但是5月31日 微信 发布了最新版本微信3.7.0。 大家更新后纷纷发现&#xff0c;原本在FileStorage/File目录…

PC端微信下的dat 文件在线解码还原成为图片

之前的时候很多人都咨询问微信的dat文件怎么才能打开&#xff1f;有没有什么软件能打开微信dat文件&#xff1f; 看了下网上的说明&#xff0c;发现就是异或处理&#xff0c;于是准备将微信dat的转码做出来&#xff0c;方便大家。 原理&#xff1a; 微信dat文件在微信进行图片…

判断当前环境在微信下,还是企业微信下

/*** 判断当前环境* return boolean [description]*/ function get_runtime_environment($to_verify_environment){// 是否在微信浏览器下if($to_verify_environment MicroMessenger){// 是否在微信环境下if ( strpos($_SERVER[HTTP_USER_AGENT], MicroMessenger) ! false &am…

华为认证 | HCIE和CCIE的区别是……

最近很多小伙伴想要了解CCIE和HCIE&#xff0c;两个认证&#xff0c;不知道选哪个方向好。 今天就给你分析一下CCIE和HCIE这两个认证的区别和优劣势。 帮助大家更好地了解这两个认证&#xff0c;为自己的职业发展做出正确的选择。 01 HCIE和CCIE证书哪个好&#xff1f; HCIE…

Windows远程桌面(mstsc)不能复制粘贴的解决办法

最近突然发现Windows远程桌面(mstsc)不能在远程端和本地端之间自由的复制和粘贴了&#xff0c;这还是非常影响使用体验的&#xff1b;因此记录一下解决方法&#xff0c;以便后续再遇到此类问题时查看如何解决&#xff1b; 文章目录 一、背景二、解决办法2.1 方法1 重启rdpclip.…

实习记录(二)Java常用工具库

一.Lombok 1.背景概述 Lombok是一个非常高效的专用于Java的自动构建插件库&#xff0c;其简化了 JavaBean 的编写&#xff0c;避免了冗余和样板式代码的出现&#xff0c;让编写的类更加简洁明了&#xff0c;可以帮助大家节省很多重复低效的代码编写。比如重复性的Setter、Gett…

学一点python基础

pythonr小基础 文章目录 pythonr小基础简介认识计算机和程序Python 定义Python程序的执行**python执行过程**python解释器类型 基本数据类型注释函数变量del 语句核心数据类型空值对象 None 整形int浮点型float字符串str**定义&#xff1a;****编码&#xff1a;****相关函数&am…