自动化测试-web(弹窗/滚动条/鼠标/等待等操作)

一、弹窗

为什么要处理弹窗?

如果页面操作过程中,有弹窗出现,不处理,无法继续对页面操作。

弹窗类型:

js原生弹窗: 警告框、输入框、提示框,这些必须处理

如何处理:

1)获取弹窗对象

2)点击同意或取消方法

alert 弹窗:只有信息及确认按钮

confirm弹窗:在alert弹窗基础上增加了取消按钮

prompt 弹窗: 在confirm基础上增加了可以输入文本

示例:

driver.switch_to.alert.accept() # 确定同意,三种弹窗都可以使用
driver.switch_to.alert.dismiss()# 取消不同意,confirm 和 prompt弹窗中使用
title = driver.switch_to.alert.text #打印弹窗信息
alert = driver.switch_to.alert # 获取alert对象
alert.send_keys() #prompt 弹窗中输入内容

二、滚动条

  1. 定义js语句

  2. 调用执行js方法

    from selenium import webdriver
    from time import sleep

    driver = webdriver.Chrome("/usr/local/bin/chromedriver")
    driver.get("https://www.hao123.com/")
    driver.maximize_window()
    sleep(5)

    向下

    js_down = "window.scrollTo(0,document.body.scrollHeight)"

    js_down = "window.scrollTo(0,1000)"

    执行js方法

    driver.execute_script(js_down)
    sleep(5)

    向上

    js_top = "window.scrollTo(0,0)"

    执行js方法

    driver.execute_script(js_top)
    sleep(5)
    driver.quit()

三、鼠标操作

导包:

from selenium.webdriver import ActionChains

实例化鼠标对象:

action = ActionChains(driver)

调用鼠标方法:

  • action.move_to_element(elementxx) 鼠标悬停
  • action.context_click(elementxx) 鼠标右击
  • action.double_click(elementxx) 鼠标双击
  • action.drag_and_drop(source,target) 拖拽

执行鼠标操作:

action.perform() 调用鼠标方法并不会去执行鼠标操作,必须调用perform才会执行

driver = webdriver.Chrome("/usr/local/bin/chromedriver")
driver.get("https://www.baidu.com")

driver.maximize_window()
sleep(5)
# 实例化鼠标对象
action = ActionChains(driver)
na = driver.find_element_by_xpath('//*[@id="hotsearch-content-wrapper"]/li[1]/a/span[2]')
# 鼠标右击
action.context_click(na).perform()
sleep(5)
driver.quit()

四、等待

什么是等待?

代码执行过程中,第一次未找到元素,先不抛出异常。 激活等待时间,在等待过程中如果找到元素就执行。

为什么要等待?

由于网络或配置与原因,导致元素未加载出来,而代码已执行,会触发异常

元素等待类型:

1、隐式等待

说明:针对全部元素生效

方法:driver.implicitly_wait(x秒)

提示:项目中,如果未封装自动化框架时,推荐使用

2、显式等待

说明:针对单个元素生效,可以修改查找频率和超时时间

特点:查找并返回元素

用法:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver

driver = webdriver.Chrome("/usr/local/bin/chromedriver")
# 显示等待 -> 返回查找到的元素
el = WebDriverWait(driver,10,0.5).until(lambda x:x.find_element(By.CSS_SELECTOR,"#userAA"))
el.send_keys("admin")

3、强制等待

语法: sleep(10)

提示: 执行到这句必须等待10秒

from time import sleep
sleep(5)

五、frame框架

frame 标签作用: 在页面中加载另一个页面

为什么要处理iframe?

焦点默认在启动页面,如果不处理iframe,无法操作iframe嵌入的页面元素

如何处理?

  • 切换到iframe: driver.switch_to.frame(iframe元素)
  • 操作元素
  • 回到默认页面:driver.switch_to.default_content()

六、切换多窗口

为什么要切换?

selenium 默认启动时,所有的焦点都在启动窗口,那么意味着无法操作其他窗口的标签

如何切换?

获取窗口句柄: driver.window_handles

使用句柄切换窗口: driver.switch_to.window(handle)

句柄:窗口的唯一标识符

多窗口之间切换工具封装:

如果定位不到元素该怎么办?

  • 元素定位代码是否正确
  • 是否匹配到唯一元素
  • 是否有元素等待
  • 是否需要鼠标悬浮
  • 元素是否在新窗口
  • 元素是否存在于iframe标签中

七、截图

为什么要截图?

出错后,方便查看错误的原因

如果截图?

driver.get_screenshot_as_file("xxx.png")

图片命名添加时间戳

driver.get_screenshot_as_file("error_{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))

八、cookie

说明:由服务器生成,存储在客户端的登录凭证

使用:

获取cookie: driver.get_cookies()

添加cookie: driver.add_cookie(data)

相关推荐
小白学大数据32 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
程序员小雷1 天前
软件测试基础:单元测试与集成测试
python·功能测试·selenium·测试工具·单元测试·集成测试·压力测试
程序员小雷2 天前
应对自动化测试中的异步操作:策略与实践
功能测试·selenium·测试工具·jmeter·单元测试·测试用例·postman
墨城烟柳Q2 天前
自动化爬虫-selenium模块万字详解
爬虫·python·selenium·自动化
raoxiaoya2 天前
python安装selenium,geckodriver,chromedriver
开发语言·python·selenium
i道i2 天前
python 爬虫 入门 六、Selenium
爬虫·python·selenium
谷隐凡二2 天前
selenium操作已开启的浏览器,方便调试
selenium·测试工具
钱钱钱端2 天前
UI自动化测试 —— CSS元素定位实践!
css·功能测试·selenium·测试工具·jmeter·ui·postman
保护小周ღ3 天前
【Web自动化】探索Selenium与WebDriver的核心原理
selenium·自动化
机器视觉小小测试员3 天前
selenium解决调用Chrome str’ object has no attribute ‘capabilities’ Process finished
chrome·python·selenium