Web自动化测试学习笔记【控件定位及操作】

一、最简单的Web自动化脚本

# 导入浏览器驱动
from selenium import webdriver
# 创建一个驱动
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 设置窗口大小
driver.set_window_size(720,800)
# 打开url
driver.get(url='http://www.baidu.com')
# 退出浏览器
driver.quit()

二、元素定位控件

# 通过id定位元素
driver.find_element_by_id()
# 通过class_name定位元素
driver.find_element_by_class_name()
# 通过超链文本定位元素
driver.find_element_by_link_text()
# 通过部分超链文本定位元素
driver.find_element_by_partial_link_text()
# 通过标签名定位元素
driver.find_element_by_tag_name()
# 通过xpath定位元素
driver.find_element_by_xpath()
# 通过css定位元素
driver.find_element_by_css_selector()

三、元素定位后执行动作

# 定位元素并点击
driver.find_element_by_id("id属性值").click()
# 定位元素并输入文本
driver.find_element_by_id("id属性值").send_keys()
# 定位元素并清空文本值
driver.find_element_by_id("id属性值").clear()
# 打印定位元素获取其文本值
print(driver.find_element_by_id("id属性值").text)
# 打印定位元素获取其尺寸大小
print(driver.find_element_by_id("id属性值").size)
# 打印当前页面的标题(页面的书签名)
print(driver.title)
# 打印当前页面的URL信息
print(driver.current_url)
# 判断控件是否出现
driver.find_element_by_xpath("").is_displayed()
# 获取控件内输入的内容:
driver.find_element_by_xpath("").get_attribute('value')

四、弹窗事件

# 页面弹窗Alert情景
# 1、只有确定按钮
# 2、有确定按钮和取消按钮
# 3、有输入框、确定按钮和取消按钮

# 光标移动到页面弹窗上,并输入内容:我同意
driver.switch_to.alert.send_keys("我同意")
# 打印弹窗内容文本信息
print(driver.switch_to.alert.text)
# 光标移动至页面弹窗,点击确定按钮
driver.switch_to.alert.accept()
# 光标移动至页面弹窗,点击取消按钮
driver.switch_to.alert.dismiss()

五、模拟鼠标事件

# 模拟鼠标事件需导入 ActionChains 模块
from selenium.webdriver.common.action_chains import ActionChains

# 初始化一个驱动
driver = webdriver.Chrome()
# 变量接收 定位到的元素
ele = driver.find_element_by_id("xxxx")
# 显示等待3秒(等待元素加载)
time.sleep(3)

# 【使用场景】触碰元素后操作子级模块
# 模拟鼠标移动到 所定位到的元素
ActionChains(driver).move_to_element(ele).perform()
# 定位到子级控件进行操作
driver.find_element_by_xpath(".xxxx").click()

# 【使用场景】模拟鼠标在元素控件右击
ActionChains().context_click(ele).perform()

# 【使用场景】模拟鼠标在元素控件双击
ActionChains().double_click().perform()

六、模拟键盘操作事件

# 模拟键盘操作事件
from selenium.webdriver.common.keys import Keys

# 单个键盘录入
# 场景1:输入的 bilibili 需回退一格,键盘按下Backspace
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
# 场景2:输入的 bilibili 后面增加空格,键盘按下 Space
driver.find_element_by_id("kw").send_keys(Keys.SPACE)

'''更多场景,ctrl+左击 Keys即可查询'''

# 多键盘录入:如:ctrl+A ,ctrl+C ,ctrl+V
driver.find_element_by_css_selector(".bg.s_ipt_wr.quickdelete-wrap input#kw").send_keys(Keys.CONTROL,"a")
driver.find_element_by_css_selector(".bg.s_ipt_wr.quickdelete-wrap input#kw").send_keys(Keys.CONTROL,"c")
driver.find_element_by_css_selector(".bg.s_ipt_wr.quickdelete-wrap input#kw").send_keys(Keys.CONTROL,"v")

七、三种等待时间

# 导入显式等待模块
import time
# 导入隐式等待模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 1、页面停留三秒
time.sleep(3)
# 2、最大等待时间10秒,如3秒找到元素则执行后续代码
driver.implicitly_wait(10)
# 3、最大等待时间为10秒,每0.5秒找一次,直到元素出现
ele = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.XPATH,'//xxx')))
ele.send_keys("123456")
# 3、最大等待时间为10秒,每0.5秒找一次,直到元素没有出现
ele = WebDriverWait(driver,10,0.5).until_not(EC.presence_of_element_located((By.XPATH,'//xxx')))
ele.send_keys("123456")

八、多窗口切换事件

# 打印所有窗口的句柄【返回值类型:list】
print(driver.window_handles)
# 打印当前窗口的句柄
print(driver.current_window_handle)

# 窗口切换 [list:下标是从 0 开始]
driver.switch_to.window(driver.window_handles[1])
# 如需关闭当前窗口,使用 .close()
driver.close()

九、iframe :控件处理

# 有id、name属性值,如:id=x-urs
driver.switch_to.frame("x-urs")

# 通过xpath/css先定位到iframe,然后切换
fra = driver.find_element_by_xpath("//div[@id='x-urs']")
driver.switch_to.frame(fra)

# 从子级iframe切换到父级iframe
driver.switch_to.parent_frame()

# 从任何层级的iframe切换到主文档
driver.switch_to.default_content()

十、Select类处理下拉框代码:

# 导入Select类
from selenium.webdriver.support.select import Select

# Select类下选择下拉列表项
# 定位下拉框,用变量s接收元素定位信息
s = driver.find_element_by_id("xxxxx")

# 通过下拉列表文本值选择
Select(s).select_by_visible_text("下拉列表文本值")

# 通过下拉列表value属性值选择
Select(s).select_by_value("5")

# 通过下拉列表index属性值选择【从0开始】
Select(s).select_by_index(3)

十一、时间选择框处理代码:

在这里插入图片描述

# 时间选择框【yyyy-mm-dd格式】
# 图片中的时间框有 input 标签

# 定位到入住日期控件标签
eleIn = driver.find_element_by_id("HD_CheckIn")
# 清空
eleIn.clear()
# 传入对应格式的日期时间
eleIn.send_keys('2020-01-01')

# 定位到退房日期控件标签
eleOut = driver.find_element_by_id("HD_CheckOut")
# 清空
eleOut.clear()
# 传入对应格式的日期时间
eleOut.send_keys('2020-01-02')

【 PS:如果上述操作无法使用sendkeys操纵,可以使用第三方 js 取消弹窗特性】

具体代码操作请参考我的这篇文章:


十二、截取并保存页面的截图

# 截取并保存页面的截图【建议png格式】
driver.get_screenshot_as_file("D:/路径.png")

十三、滚动条事件

# 滚动条拉到底部
js = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

# 滚动条拉到最上面
js = "var q=document.documentElement.scrollTop=0"
driver.execute_script(js)

# 滚动到页面的50%的位置
driver.execute_script("window.scrollTo(0, document.body.scrollHeight*0.5)");

#相对当前坐标移动到的坐标
driver.execute_script("window.scrollBy(0, 900)");
time.sleep(2)

#移动到绝对坐标
driver.execute_script("window.scrollTo(0, 1500)");

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值