自动化测试心得

作者:Keysqiu
创建时间:2025-11-30 18:19:02 最后一次修改时间:2025-12-02 12:18:06
Categories: Tags:

1、在切换路由之后,如果想要selenium操作的实例也跟着切换,直接再get(路由)一次就ok了,就这么简单,如果是多个页面,才是需要driver.switch_to.window(driver.window_handles[0]),driver.window_handles保存了当前所有窗口实例,指打开的页面

测试报价管理系统的代码

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
browser: WebDriver = webdriver.Chrome()
browser.maximize_window()  # 最大化窗口
# 打开链接
browser.get('http://localhost:8080/login')
browser.find_element(By.XPATH, '//*[@id="app"]/div/div/form/div[1]/div/div/input').send_keys('admin')
browser.find_element(By.XPATH, '//*[@id="app"]/div/div/form/div[2]/div/div/input').send_keys('123456')
sleep(5)
browser.find_element(By.XPATH, '//*[@id="app"]/div/div/form/div[4]/div/button[2]').click()
# 2.切换路由工作
browser.get("http://localhost:8080/home")
# 点击用户管理
browser.find_element(By.XPATH,'//*[@id="app"]/div/section/aside/ul/div[3]/div/li/ul/div[1]/li').click()
browser.find_element(By.XPATH,'//*[@id="app"]/div/section/section/main/div/div[1]/div[1]/input').send_keys('admin')
browser.find_element(By.XPATH,'//*[@id="app"]/div/section/section/main/div/div[1]/button[1]/span').click()
sleep(5)
# 点击角色管理
browser.find_element(By.XPATH,'//*[@id="app"]/div/section/aside/ul/div[3]/div/li/ul/div[2]/li').click()
sleep(5)
# 点击菜单管理
browser.find_element(By.XPATH,'//*[@id="app"]/div/section/aside/ul/div[3]/div/li/ul/div[3]/li').click()
sleep(5)
# 点击文件管理
browser.find_element(By.XPATH,'//*[@id="app"]/div/section/aside/ul/div[3]/div/li/ul/div[4]/li').click()
sleep(5)
# 把鼠标悬停在头像下拉列表那
ele = browser.find_element(By.XPATH, '//*[@id="app"]/div/section/section/header/div/div[2]/div/div/div[2]')
print(ele.text)
# 实例化鼠标
action = ActionChains(browser)
# 鼠标悬停
action.move_to_element(ele)
# 鼠标执行
action.perform()
sleep(5)
# 根据类名找到下拉列表的两个选项
buttons = browser.find_elements(By.CLASS_NAME, 'el-dropdown-menu__item')
# 点击第二个退出按钮
buttons[1].click()
sleep(10)
browser.quit()

元素定位不到出现的原因:

元素不可用,只读,不可见

通过js脚本执行让元素改变原来的属性之后再进行定位操作

元素出现动态的属性,比如id

通过手写xpath进行定位,调用判断元素开头以及结束或者内容进行定位(其实就是找规律)

其他

元素的操作:

元素属性获取

等待

因为在web中看到的元素,不一定写在html中,有可能是通过js代码的dom操作产生出来的,而js产生的元素,很可能先要获取数据,处理之后才会显示,那么不一定页面打开所有的元素就加载完全,需要有一定的等待时间。

强制等待

隐式等待

在创建好驱动对象之后,调用隐式等待的方式传入等待时间即可

browser= webdriver.Chrome()
browser.implicitly_wait(5)

原理:

显式等待

使用方式:
导包

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

使用

# 下面的 //div[@class='f-info'] 只是个XPATH例子
el1 = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='f-info']")))

原理

CSV文件:格式是文本格式(注意:数据必须使用英文逗号隔开,不能用中文逗号),但是打开是一个表格的视图