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

【Selenium自动化测试】滑动解锁与窗口截图、关闭

滑动解锁

滑动解锁是目前Web测试中最常遇到的,常见于登录验证之类的场景,针对滑动操作,webdriver提供了ActionChains类来处理此类场景的操作。下面通过两个例子来了解下如何使用。

# case1
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.common.exceptions import UnexpectedAlertPresentException

driver = webdriver.Chrome()
driver.get("https://www.helloweba.net/demo/2017/unlock/")
# 定位滑动块(可拖拽的最左侧的小块)
slider = driver.find_elements(By.CLASS_NAME,"slide-to-unlock-handle")[0]
# print(slider)
action = ActionChains(driver)
action.click_and_hold(slider).perform()
action.move_by_offset(300,0).perform()
success_text = driver.switch_to.alert.text
print("成功的弹框",success_text)
sleep(5)

主要用到ActionChains中下面的两个方法:

  • click_and_hold(): 单击并按下鼠标左键,在鼠标事件中介绍过。
  • move_by_offset():移动鼠标,第一个参数为x 坐标距离,第二个参数为y坐标距离。

效果图如下:

在这里插入图片描述

# case 2
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.jq22.com/yanshi4976")
sleep(2)
driver.switch_to.frame("iframe")
driver.find_element(By.ID,"appDate").click()

# 定位要滑动的年、月、日
dwwos = driver.find_elements(By.CLASS_NAME,'dwwo')
year = dwwos[0]
month = dwwos[1]
day = dwwos[2]

action = ActionChains(driver)
action.click_and_hold(year).perform()
action.move_by_offset(0,-200).perform()


sleep(3)
driver.quit()

通过滑动操作选择时间日期。效果如下
在这里插入图片描述

窗口截图

在自动化测试过程中,有时对页面进行截图已确认成功或失败时的画面,webdriver为我们提供了save_screenshot()来进行截图,该方法只有一个参数filename,文件名可以携带路径。(另:WebDriver 建议使用png 作为图片的后缀名)

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element(By.ID,'kw').send_keys("海贼王")
driver.find_element(By.ID,'su').click()
sleep(3)
driver.find_element(By.LINK_TEXT,'图片').click()

# 截取当前窗口,指定截图图片的保存位置
driver.save_screenshot("./files/images/baidu_img.png")

sleep(1)
driver.quit()

窗口关闭

在前面的例子或此前的文章中我们在程序结尾都会看到quit()这个方法,此方法用来关闭浏览器。除此之外还有一个close()方法

相同点:

  • close()quit() 都是管理浏览器

区别:

  • close ():只关闭当前句柄所在窗口,当浏览器只打开一个窗口时,其表现就相当于关闭整个浏览器,但是不会退出webdriver
  • quit():不仅关闭浏览器,而且还会退出webdriver,最后释放driver server的资源

下面通过两个例子来感受一下两者的区别:

# close()之关闭了新打开的窗口,浏览器未关闭
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element(By.LINK_TEXT,"新闻").click()
cur_win = driver.current_window_handle

all_win = driver.window_handles
# 将窗口句柄切换为新打开的tab页
for i in all_win:
    if i != cur_win:
        driver.switch_to.window(i)

time.sleep(3)
# 关闭新打开的tab页
driver.close()

# 使浏览器保留
input("t")

上述代码运行结果:关闭了新tab页后,执行了最后一行代码,浏览器还在。


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element(By.LINK_TEXT,"新闻").click()
cur_win = driver.current_window_handle

all_win = driver.window_handles
# 将窗口句柄切换为新打开的tab页
for i in all_win:
    if i != cur_win:
        driver.switch_to.window(i)

time.sleep(3)

driver.quit()

# 使浏览器保留
input("t")

上述代码运行结果:关闭了整个浏览器,浏览器已经关闭就算运行最后一行代码也无济于事。

以上就是本期文章的所有内容,感谢观看,如果对您有帮助请点赞关注+收藏,一键三连,多谢支持!


http://www.kler.cn/a/3106.html

相关文章:

  • Linux 6.x版本内核的proc目录组织
  • Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查
  • 【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
  • 【C++】特殊类设计
  • 大数据治理实战:架构、方法与最佳实践
  • 团体程序设计天梯赛-练习集——L1-022 奇偶分家
  • Spring Boot 实现多文件上传
  • “提效”|教你用ChatGPT玩数据
  • Android 基础功能例子
  • 智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
  • 自定义类型 (结构体)
  • C# 支付宝接口在线收款退款
  • 最强的Python可视化神器,你有用过么?
  • 【DFS专题】深度优先搜索 “暴搜”优质题单推荐 10道题(C++ | 洛谷 | acwing)
  • ChatGPT 引领的 AI 革命爆发了,一起上车吧!
  • 你是真的“C”——进行动态内存分配库函数的使用详解
  • 【Java】7 再识数组|数组的基本操作
  • 【数据结构】用队列实现栈
  • 应届生投腾讯,被面试官问了8个和 ThreadLocal 相关的问题。
  • 树莓派Pico开发板I2C OLED显示模块接口与MicroPython编程
  • 联合体(共用体)
  • C bomb(tarjin + 拓扑排序)
  • 又一款全新的基于 GPT4 的 Python 神器Cursor,关键还免费
  • STM32 ADC+定时器+DMA+FFT
  • Nginx的漏洞浮现
  • 机场航拍图像检测软件(Python+YOLOv5深度学习模型+清新界面)