【学习 自动化 day7】

学习目标:

  • 能通过select下拉操作,实现下拉值自动选择
  • 能通过浏览器操作方法,实现浏览器窗口最大化、并获取浏览器标题和url信息
  • 能通过窗口截图方法保留自动化测试结果
  • 能实现多窗口自动切换
  • 能通过js自动处理alert弹出窗
  • 能控制滚动条自动滑动到指定位置
  • 能通过鼠标操作实现首页导航商品自动选择
  • 能使用元素等待方法来提升自动化脚本运行效率能够通过xpath定位到页面元素

学习内容:

一、商品上架业务

  • 能通过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://hmshop
test.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://hmshop
test.itheima.net/index.php/Home/Index/index.html")
 # 2、点击首页【登录】 打开登录页面
driver.find_element(By.LINK_TEXT, "登录").click()
 time.sleep(3)
 # 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()
 # 退出浏览器
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://hmshop
test.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, "登    
time.sleep(2)
录").click()
 # 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

"""
需求:打开注册页面,完成以下操作:
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://hmshop
test.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,控制滚动条滑动到页面最底部
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 隐式等待

在这里插入图片描述

# 导包
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")
 # 需求:打开注册页面,完成以下操作
# 1).最大化窗口
# 2).使用隐式等待定位延时加载输入框,输入admin
# 隐式等待
driver.implicitly_wait(10)
 driver.find_element(By.ID, "username").send_keys("admin")
 time.sleep(3)
 # 项目地址:http://121.43.169.97:8848/pageA.html
 # 退出浏览器
driver.quit()

5.2 显式等待

在这里插入图片描述

# 导包
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")
 # 需求:打开注册页面,完成以下操作
# 1).最大化窗口
# 2).使用隐式等待定位延时加载输入框,输入admin
 #
 # 项目地址: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、元素定位失败原因

在这里插入图片描述


学习时间:

  • 上午 9 点-上午 11 点
  • 下午 3 点-下午 6 点

学习产出:

  • 能通过select下拉操作,实现下拉值自动选择
  • 能通过浏览器操作方法,实现浏览器窗口最大化、并获取浏览器标 题和url信息
  • 能通过窗口截图方法保留自动化测试结果
  • 能实现多窗口自动切换
  • 能通过js自动处理alert弹出窗
  • 能控制滚动条自动滑动到指定位置
  • 能通过鼠标操作实现首页导航商品自动选择
  • 能使用元素等待方法来提升自动化脚本运行效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值