首页 > 其他分享 >web自动化——对浏览器的控制(三)

web自动化——对浏览器的控制(三)

时间:2023-03-11 19:57:03浏览次数:45  
标签:web 浏览器 webdriver keys driver send element 自动化 find

selenium通过面向对象思路,让我们完成对浏览器的控制

  • 属性:获取数据(比如,获取浏览器窗口的属性)
  • 方法:操作数据(比如,对浏览器的窗口大小进行控制)

selenium库中webdriver模块的使用

1.对浏览器控制

方法 说明
set_window_size() 设置浏览器窗口大小
back() 控制浏览器后退
forward() 控制浏览器前进
refresh() 刷新当前页面
clear() 清除文本
send_keys (value) 模拟按键输入
click() 单击元素
submit() 用于提交表单
get_attribute(name) 获取元素属性值
is_displayed() 设置该元素是否用户可见
size 返回元素的尺寸
text 获取元素的文本
get_screenshot_as_file(path) 截图保存文件
maximize_window() 最大化

用例:

from selenium import webdriver

import time
#1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口
browser = webdriver.Chrome()

#2.通过浏览器向服务器发送URL请求
browser.get("https://www.baidu.com/")

time.sleep(3)

#3.刷新浏览器
browser.refresh()

#4.设置浏览器的大小
browser.set_window_size(1400,800)

#5.设置链接内容
element=browser.find_element_by_link_text("新闻")
element.click()

2.鼠标控制

关于鼠标的操作封装在webdrive的ActionChains类中

方法 说明
ActionChains(driver) 构造ActionChains对象
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位
double_click() 双击
drag_and_drop() 拖动
perform() 执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作

用例:


from selenium import webdriver
#1.引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains

#1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口
driver = webdriver.Chrome()

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

#2.定位到要悬停的元素
element= driver.find_element_by_link_text("设置")

#3.对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(element).perform()

#找到链接
elem1=driver.find_element_by_link_text("搜索设置")
elem1.click()

#通过元素选择器找到id=sh_2,并点击设置
elem2=driver.find_element_by_id("sh_1")
elem2.click()

#保存设置
elem3=driver.find_element_by_class_name("prefpanelgo")
elem3.click()

3.键盘控制

模拟键盘的方法放在【send_keys()】了Selenium中的Key模块,这个方法不仅可以用于键盘输入,也可以模拟键盘操作。

方法 说明
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1…Fn) 键盘 F1…Fn

4.获取属性信息

属性 说明
title 当前页面的标题
current——url 用于获得当前页面的url
text 元素的文本信息
page_source 读取网页HTML源码

用例:

from selenium import webdriver
from time import sleep

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

print('Before search================')

# 打印当前页面title
title = driver.title
print(title)

# 打印当前页面URL
now_url = driver.current_url
print(now_url)

driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)

print('After search================')

# 再次打印当前页面title
title = driver.title
print(title)

# 打印当前页面URL
now_url = driver.current_url
print(now_url)

# 获取结果数目
user = driver.find_element_by_class_name('nums').text
print(user)

#关闭所有窗口
driver.quit()

4.窗口切换

方法 说明
current_window_handle 获得当前窗口句柄
window_handles 返回所有窗口的句柄到当前会话
switch_to.window(handle) 切换到handle对应的窗口
swich_to.alert 处理弹窗
switch_to.window("window_name") 切换窗口

用例: 

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

#1.获得百度搜索窗口句柄
sreach_windows = driver.current_window_handle

driver.find_element_by_link_text('登录').click()
driver.find_element_by_link_text("立即注册").click()

#1.获得当前所有打开的窗口的句柄
all_handles = driver.window_handles

#3.进入注册窗口
for handle in all_handles:
    if handle != sreach_windows:
        driver.switch_to.window(handle)
        print('跳转到注册窗口')
        driver.find_element_by_name("account").send_keys('123456789')
        driver.find_element_by_name('password').send_keys('123456789')
        time.sleep(2)
    
driver.quit()

5.警告框处理

在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。

方法 说明
text 返回 alert/confirm/prompt 中的文字信息
accept() 接受现有警告框
dismiss() 解散现有警告框
send_keys(keysToSend) 发送文本至警告框。keysToSend:将文本发送至警告框。

用例:



from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠标悬停至“设置”链接
link = driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(link).perform()

# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()

#在此处设置等待2s否则可能报错
time.sleep(2)
# 保存设置
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(2)

# 接受警告框
driver.switch_to.alert.accept()

driver.quit()

6.下拉框选择操作

需要使用Select类:

from selenium.webdriver.support.select import Select
方法 说明
select_by_value(“选择值”)  
select_by_index(“索引值”) 下拉框的索引
select_by_visible_testx(“文本值”) 下拉框的文本值

用例:

from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep

driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

#1.鼠标悬停至“设置”链接
driver.find_element_by_link_text('设置').click()
sleep(1)
#2.打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
sleep(2)

#3.搜索结果显示条数
sel = driver.find_element_by_xpath("//select[@id='nr']")
Select(sel).select_by_value('50')  # 显示50条

sleep(3)
driver.quit()

7.文件上传

对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。

from selenium import webdriver
import os

driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('upfile.html')
driver.get(file_path)

# 定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')

driver.quit()

8.cookie操作

有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

9.关闭浏览器

方法 说明
close 关闭单个窗口
quit() 退出,关闭所有窗口

 

标签:web,浏览器,webdriver,keys,driver,send,element,自动化,find
From: https://www.cnblogs.com/zhangxiaoze/p/17206467.html

相关文章

  • web测试+测试工具+用例 笔记
    测试工具:傅立叶:管理UI自动化平台,管理用例结构,其中包含用例的路径结构:产品-模块-场景菲尔兹:管理用例计划主干用例和冒烟用例区分:主干:整个项目比较重要的用例。主干......
  • Day06-maven的web工程
    maven的web工程创建步骤:1.创建普通的maven工程​ 参考:略2.打成war包​ 说明:普通工程打成jar包。web工程打war包。在pom.xml中书写如下内容:3.在普通的maven工程上生......
  • PentestLab-web安全SQL注入-EXP2
    我们打开pentestlab靶机选择“sql  injections”选择“Example2”观察页面发现name是注入点使用工具测试sqlmap参数为pythonsqlmap.py-u"http://192.168.29.148/sqli/......
  • 如何使用webgl(three.js)实现3D消防、3D建筑消防大楼、消防数字孪生、消防可视化解决
    序:又是很久没出随笔文章了,一篇文章有时候整理一天,实在是抽不出来时间。最近在回顾几年前的项目时,发现这个智慧三维消防可视化项目很有回顾价值,索性就拿出来讲讲......
  • 十字路口,呼吁IP地址自动化部署和集中管理​
    IPv4移植到IPv6和IP成本逐步提高,这两大趋势也让全球范围内的企业IP地址管理走到了十字路口。​IP地址迁移势在必行。为了更好地支持5G、云服务、智慧城市、物联网的快速发展......
  • 十字路口,呼吁IP地址自动化部署和集中管理​
    IPv4移植到IPv6和IP成本逐步提高,这两大趋势也让全球范围内的企业IP地址管理走到了十字路口。​IP地址迁移势在必行。为了更好地支持5G、云服务、智慧城市、物联网的快速发展......
  • 搭建良好编写体验的webgl编程环境 vscode+vit
    因为webgl代码是以字符串的形式嵌入在javascript代码中,这对于我们编写webgl代码的体验不友好,本文介绍如何搭建友好webgl编程环境:需要安装的vscode插件WebGLGLSLEdito......
  • Web 应用中的 RAIL 模型 和 Chrome 开发者工具 Performances 面板对其的度量方法
    运行时性能是指页面在运行时的表现,而不是加载时的表现。本文探讨如何使用ChromeDevTools性能面板分析运行时性能。就RAIL模型而言,这个工具对于分析页面的Response、......
  • WebSocket3-10
    WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。为什么传统的HTTP协议不能做到We......
  • 网络安全(中职组)-B模块:Web安全应用-2
    Web安全应用-2任务环境说明:√服务器场景:match_win03-3-1(关闭链接)√服务器场景操作系统:WindowsServer20031.使用渗透机KaliLinux,登录靶机HTTP服务后台管理页面,并......