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

六、web自动化测试02

目录

  • 一、商品上架业务
  • 二、下单业务
    • 1、登录成功
    • 2、下单成功
      • 2.1 获取浏览器title和url
      • 2.2 浏览器多窗口处理
      • 2.3 窗口截图
      • 2.4 alert弹窗处理
  • 三、其他API
    • 1、浏览器操作
    • 2、获取元素信息
    • 3、滚动条处理
    • 4、鼠标操作
    • 5、元素等待
      • 5.1 隐式等待
      • 5.2 显式等待
      • 5.3 二者区别(面试题)
  • 四、xpath定位
  • 五、总结
    • 1、常见元素定位方法
    • 2、元素定位失败原因

一、商品上架业务

  • 能通过select下拉操作,实现下拉值自动选择

在这里插入图片描述

  • 技术点:定位一组元素
  • 方法:driver.find_elements(定位策略, 表达式)
  • 结果:返回所有找到元素的一个列表,通过列表的下标进行取值操作
# 导包
import time
import random
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from tools.chromeDriver import get_driver, quit_driver# 获取浏览器并打开页面
driver = get_driver("https://hmshoptest.itheima.net/index.php/Admin/Admin/login")#页面操作
# 1、商家登录
driver.find_elements(By.CLASS_NAME, "input-text")[0].send_keys("admin")  # ctrl + d
driver.find_elements(By.CLASS_NAME, "input-text")[1].send_keys("HM_2023_test")
driver.find_elements(By.CLASS_NAME, "input-text")[2].send_keys("8888")
time.sleep(1)
driver.find_element(By.CLASS_NAME, "sub").click()# 2、打开商品上架页面
# 2.1 点击导航栏的【商城】
time.sleep(1)
# driver.find_element(By.LINK_TEXT, "商城").click()
driver.find_element(By.PARTIAL_LINK_TEXT, "商城").click()# 2.2 点击左侧导航栏【商品列表】
time.sleep(1)
driver.find_element(By.LINK_TEXT, "商品列表").click()# 2.3 点击【添加商品】按钮
# 元素定位失败场景1:页面存在frame嵌套,需要①先切换到指定的frame页 ② 完成页面元素定位与操作 ③ 返回默认页面
time.sleep(1)
# 2.3.1 切换frame窗口
driver.switch_to.frame(driver.find_element(By.ID, "workspace"))# 2.3.2 frame上元素定位与操作
driver.find_elements(By.CLASS_NAME, "add")[0].click()# 2.3.3 返回默认页面供后续业务操作
driver.switch_to.default_content()# 3、添加商品
# ① 切换页面
driver.switch_to.frame(driver.find_element(By.ID, "workspace"))
# ② 页面操作
# 3.1 商品名称
time.sleep(1)
driver.find_element(By.NAME, "goods_name").send_keys(f"Jack-Test-1214-
{random.randint(101, 666)}")# 3.2 商品分类
# driver.find_element(By.ID, "cat_id").click()
# time.sleep(2)
# driver.find_element(By.CSS_SELECTOR, "#cat_id>[value='7']").click()
# time.sleep(1)
# 基于select-option下拉框 使用selenium自带的select工具类进行操作
select = Select(driver.find_element(By.ID, "cat_id"))  # 快捷导包 ctrl + alt + 空格
# select.select_by_value("7")   # 根据value属性进行定位
# select.select_by_visible_text("鞋、箱包、珠宝、手表") # 根据下拉框的可见文字进行定位
select.select_by_index(1)  # 根据option下标取值进行定位# 3.3 本店售价
driver.find_element(By.NAME, "shop_price").send_keys(10)# 3.4 市场价
driver.find_element(By.NAME, "market_price").send_keys(20)# 3.5 是否包邮
driver.find_element(By.ID, "is_free_shipping_label_1").click()# 3.6 提交
time.sleep(1)
driver.find_element(By.LINK_TEXT, "确认提交").click()# ③ 返回默认页面
driver.switch_to.default_content()
# 退出浏览器
quit_driver(driver)

二、下单业务

  • 能通过js自动处理alert弹出窗
  • 能通过窗口截图方法保留自动化测试结果
  • 能实现多窗口自动切换

下单业务:
1、首页
2、登录
3、搜索
4、浏览商品
5、购物车
6、提交订单
7、支付
8、我的订单

1、登录成功

# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver# 下单业务
# 1、打开首页
driver = get_driver("https://hmshoptest.itheima.net/index.php/Home/Index/index.html")#2、点击首页【登录】 打开登录页面
driver.find_element(By.LINK_TEXT, "登录").click()# 3、输入账号密码完成登录成功
driver.find_element(By.ID, "username").send_keys("13488888888")
driver.find_element(By.ID, "password").send_keys("123456")
driver.find_element(By.ID, "verify_code").send_keys("8888")
driver.find_element(By.LINK_TEXT, "登   录").click()
time.sleep(3)# 退出浏览器
quit_driver(driver)

2、下单成功

# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver# 下单业务
# 1、打开首页
driver = get_driver("https://hmshoptest.itheima.net/index.php/Home/Index/index.html")#2、点击首页【登录】 打开登录页面
driver.find_element(By.LINK_TEXT, "登录").click()# 3、输入账号密码完成登录成功
driver.find_element(By.ID, "username").send_keys("13488888888")
driver.find_element(By.ID, "password").send_keys("123456")
driver.find_element(By.ID, "verify_code").send_keys("8888")
driver.find_element(By.LINK_TEXT, "登   录").click()
time.sleep(2)# 4、点击搜索框、搜索商品
driver.find_element(By.ID, "q").send_keys("Jack-Test-1214")
driver.find_element(By.LINK_TEXT, "搜索").click()
time.sleep(2)# 5、点击商品列表中的【加入购物车】
driver.find_elements(By.LINK_TEXT, "加入购物车")[0].click()
time.sleep(2)# 6、进入购物车 查看商品信息
# 6.1 关闭弹窗界面
driver.find_element(By.CLASS_NAME, "layui-layer-setwin").click()
time.sleep(2)# 6.2 点击页面购物车图标
driver.find_element(By.CSS_SELECTOR, ".c-n.fl").click()
time.sleep(2)# 7、查看购物车信息并结算
driver.find_element(By.LINK_TEXT, "去结算").click()
time.sleep(2)# 8、提交订单
driver.find_element(By.ID, "submit_order").click()
# 元素定位失败常见场景:页面元素未加载完全、导致定位失败
#             解决:设置等待时间
#                   强制等待
#                   显式等待
#                   隐式等待
time.sleep(5)# 9、支付
driver.find_element(By.LINK_TEXT, "确认支付方式").click()
time.sleep(2)# 打印当前页面标题信息
print(driver.title)
print(driver.current_url)# 10、点击我的订单 查看订单状态
driver.find_element(By.LINK_TEXT, "我的订单").click()
time.sleep(2)# 切换窗口信息
# 定位失败的常见场景:浏览器多窗口切换
handles = driver.window_handles      # 获取所有浏览器已打开的窗口信息 (句柄)
driver.switch_to.window(handles[1])  # 使用下标处理指定的窗口# 打印当前页面的标题信息
print(driver.title)
print(driver.current_url)# 退出浏览器
quit_driver(driver)

2.1 获取浏览器title和url

在这里插入图片描述

2.2 浏览器多窗口处理

在这里插入图片描述

2.3 窗口截图

在这里插入图片描述

# 11、截图保存当前订单页
driver.get_screenshot_as_file("order.png")

在这里插入图片描述

2.4 alert弹窗处理

  • 能通过js自动处理alert弹出窗

在这里插入图片描述

  • 需求:打开注册页面,完成以下操作:
    1).点击 alert 按钮
    2).关闭警告框
    3).输入用户名:admin
  • 项目:http://121.43.169.97:8848/pageA.html
# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver# 打开页面
driver = get_driver("http://121.43.169.97:8848/pageA.html")# 1).点击 alert 按钮
driver.find_element(By.ID, "alerta").click()
time.sleep(1)# 2).关闭警告框
driver.switch_to.alert.accept()
time.sleep(1)# 3).输入用户名:admin
driver.find_element(By.ID, "userA").send_keys("admin")
time.sleep(1)# 退出浏览器
quit_driver(driver)

三、其他API

1、浏览器操作

  • 能通过浏览器操作方法,实现浏览器窗口最大化、并获取浏览器标题和url信息

在这里插入图片描述
在这里插入图片描述

# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver# 浏览器窗口最大化访问商城
driver = get_driver("https://hmshoptest.itheima.net/index.php/Home/Index/index.html")
driver.maximize_window()#获取当前页面标题及URL信息
print(driver.title)
print(driver.current_url)
print("-" * 80)# 首页跳转至登录页并登录
driver.find_element(By.LINK_TEXT, "登录").click()
time.sleep(1)# 获取登录成功后页面标题及URL信息
# 1、登录成功
driver.find_element(By.ID, "username").send_keys("13488888888")
driver.find_element(By.ID, "password").send_keys("123456")
driver.find_element(By.ID, "verify_code").send_keys("8888")
driver.find_element(By.NAME, "sbtbutton").click()
time.sleep(1)# 2、获取当前页面标题及URL信息
print(driver.title)
print(driver.current_url)
print("-" * 80)# 个人中心跳转至我的浏览页
driver.find_element(By.LINK_TEXT, "我的浏览").click()
time.sleep(1)# 获取当前页面标题及URL信息
# 多窗口切换
handles = driver.window_handles
driver.switch_to.window(handles[1])
print(driver.title)
print(driver.current_url)
print("-" * 80)
time.sleep(2)# 关闭我的浏览页面
driver.close()
time.sleep(3)# 退出浏览器
driver.quit()

2、获取元素信息

在这里插入图片描述
在这里插入图片描述

# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver# 浏览器窗口最大化访问商城
driver = get_driver("https://hmshop-test.itheima.net/Home/user/reg.html")# 需求:
# 1).获取手机号码输入框的大小
print(driver.find_element(By.NAME, "username").size)# 2).获取页面上第一个span标签的文本内容
print(driver.find_elements(By.TAG_NAME, "span")[0].text)# 3).获取页面上登录超链接的地址
print(driver.find_element(By.PARTIAL_LINK_TEXT, "登录").get_attribute("href"))# 4).判断页面中【用户服务协议】是否为选中状态
print(driver.find_element(By.ID, "checktxt").is_selected())# 5).判断页面中的【同意协议并注册】是否可用
print(driver.find_element(By.CSS_SELECTOR, ".regbtn.J_btn_agree").is_enabled())# 退出浏览器
driver.quit()

3、滚动条处理

  • 能控制滚动条自动滑动到指定位置

在这里插入图片描述

# 导包
import time
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver# 浏览器窗口最大化访问商城
driver = get_driver("https://hmshop-test.itheima.net/Home/Index/index.html")# 需求:打开商城首页,完成以下操作
#
# 1).暂停2s,控制滚动条滑动到页面最底部
time.sleep(2)
js = "window.scrollTo(0, 10000)"
driver.execute_script(js)# 2).暂停2s,控制滚动条回到顶部
time.sleep(2)
js = "window.scrollTo(0, 0)"
driver.execute_script(js)
time.sleep(2)# 退出浏览器
driver.quit()

4、鼠标操作

  • 能通过鼠标操作实现首页导航商品自动选择

在这里插入图片描述

# 导包
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver# 浏览器窗口最大化访问商城
driver = get_driver("https://hmshop-test.itheima.net/Home/Index/index.html")# 需求:打开商城首页,完成以下操作
#
# 1).暂停2s,鼠标悬停【箱包】分类
time.sleep(2)
action = ActionChains(driver)
action.move_to_element(driver.find_element(By.LINK_TEXT, "箱包"))
action.perform()
time.sleep(2)# 2).暂停2s,查看【珠宝】分类下商品信息
driver.find_element(By.LINK_TEXT, "珠宝").click()
time.sleep(3)# 退出浏览器
driver.quit()

5、元素等待

  • 能使用元素等待方法来提升自动化脚本运行效率

5.1 隐式等待

在这里插入图片描述

  • 需求:打开注册页面,完成以下操作
    1).最大化窗口
    2).使用隐式等待定位延时加载输入框,输入admin

  • 项目地址:http://121.43.169.97:8848/pageA.html

# 导包
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from tools.chromeDriver import get_driver# 浏览器窗口最大化访问商城
driver = get_driver("http://121.43.169.97:8848/pageA.html")# 隐式等待
driver.implicitly_wait(10)
driver.find_element(By.ID, "username").send_keys("admin")
time.sleep(3)# 退出浏览器
driver.quit()

5.2 显式等待

在这里插入图片描述

  • 需求:打开注册页面,完成以下操作
    1).最大化窗口
    2).使用隐式等待定位延时加载输入框,输入admin

  • 项目地址:http://121.43.169.97:8848/pageA.html

# 导包
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from tools.chromeDriver import get_driver# 浏览器窗口最大化访问商城
driver = get_driver("http://121.43.169.97:8848/pageA.html")# 显式等待
element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element(By.ID, 
"username"))
element.send_keys("admin")
time.sleep(3)# 退出浏览器
driver.quit()

5.3 二者区别(面试题)

在这里插入图片描述

四、xpath定位

  • 能够通过xpath定位到页面元素
    在这里插入图片描述
    在这里插入图片描述
  • 技术点:xpath定位
  • 策略:
    • ① 路径定位:
      • 绝对路径(/html/xxx 注意:不推荐) 检查==》复制==》复制完整xpath
      • 相对路径(//* xxx) 检查==》复制==》复制xpath
    • ② 文本定位:
      • 相等 //*[text()=‘文字’]
      • 包含 //*[contains(text(), ‘文字’)]
  • 场景:当页面元素没有基本信息时。可以继续页面显示文字通过xpath进行定位

需求:xpath定位实现冷链监控系统自动登录
说明:
项目地址:http://120.26.52.119/
账号:admin
密码:HM_2023_test

#
import time
from selenium.webdriver.common.by import By
# 导包
from tools.chromeDriver import get_driver, quit_driver# 打开页面
driver = get_driver("http://120.26.52.119/")# 页面操作
# 输入账号
driver.find_element(By.XPATH, '//*
[@id="app"]/div/form/div[2]/div[1]/div/div[1]/input').send_keys("admin")# 输入密码
driver.find_element(By.XPATH, '//*
[@id="app"]/div/form/div[2]/div[2]/div/div[1]/input').send_keys("HM_2023_test")# 点击登录
driver.find_element(By.XPATH, '//*[@id="app"]/div/form/div[2]/button').click()
time.sleep(3)# 实时展示监控页面信息
# 点击监控管理
# //*[text()='监控管理']
driver.find_element(By.XPATH, "//*[text()='监控管理']").click()
time.sleep(1)# 点击实时报警
# //*[contains(text(), '实时报警')]
driver.find_element(By.XPATH, "//*[contains(text(), '实时报警')]").click()
time.sleep(2)# 退出浏览器
quit_driver(driver)

五、总结

1、常见元素定位方法

在这里插入图片描述

2、元素定位失败原因

在这里插入图片描述

相关文章:

  • 跨境电商必看: Google AdSense 无效流量核心原因及解决措施
  • leetcode刷题日记——逆波兰表达式求值
  • 如何用WordPress AI插件自动生成SEO文章,提升网站流量?
  • 开源免费!AI视频分析神器,智能识别画面,1秒提取关键帧!附详细教程
  • 反转链表.
  • G1垃圾回收器中YoungGC和MixedGC的区别
  • 【ESP32-IDF笔记】20-配置以太网网络(W5500)
  • linux离线部署open-metadata
  • kotlin与MVVM结合使用总结(三)
  • 13.ArkUI Navigation的介绍和使用
  • SIEMENS PLC程序解读 -Serialize(序列化)SCATTER_BLK(数据分散)
  • 关于位运算的一些小记
  • 速成GO访问sql,个人笔记
  • AI之FastAPI+ollama调用嵌入模型OllamaBgeEmbeddings
  • 用 ESP32 模拟 Wiegand 刷卡器:开发门禁系统必备的小工具
  • C++入门小馆: 深入了解STLlist
  • 【金仓数据库征文】-不懂数据库也能看懂!一文解析金仓技术介绍以典型应用
  • 电子病历高质量语料库构建方法与架构项目(数据遗忘篇)
  • Redis 集群切片全解析:四种常见技术的原理、优劣与应用
  • 【MQ篇】RabbitMQ的消费者确认机制实战!
  • 5月1日起,涉外婚姻登记将在上海市16区全面铺开
  • 3岁男童疑遭父亲虐待,杭州警方:在异地发生,嫌疑人已被抓
  • 牛市早报|特朗普称或将“大幅降低”对华关税,外交部回应
  • 展讯:漫游者秦龙和巫鸿的三本书
  • 医改经验如何因地制宜再创新?国家卫健委“以例说法”
  • 国际乒联祝贺王励勤当选中国乒协主席并向刘国梁致谢