本页自动汇总「自动化测试」分类下的全部笔记(含子分类),随笔记增删实时更新。

一、安装谷歌浏览器(如果已经安装了的,可以忽略这一步)

链接:​https://pan.baidu.com/s/1jcQdFdNHQBHkKAGghd2rpA?pwd=6mt8
提取码:6mt8
–来自百度网盘超级会员V5的分享
把网盘里面的​
安装包​下载下来之后,​双击​运行它,它就会自动装好的~~

二、安装完之后看看谷歌浏览器当前的版本

依次点击

即可看到浏览器当前版本

三、去下载对应版本的驱动

1、chromedriver驱动114(包含)版本之前版本下载步骤

114版本之前chromedriver下载地址:(版本如果没有完全一致的,相近的也是ok的)

2、114以上版本下载

① https://sites.google.com/chromium.org/driver/home

② 点击 Downloads

③ 点击 the Chrome for Testing availability dashboard


往下拉,我们可以看见114之后的版本

④ 我们根据自己的系统的版本复制后面的下载地址(版本如果没有完全一致的,相近的也是ok的)

⑤ 复制完成,在浏览器中浏览,就可以下载了

四、下载完之后,解压,把文件夹里面的chromedriver.exe复制到你项目的python.exe同级目录下

五、在你项目环境里面,输入以下命令即可

pip install selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

然后就可以愉快的玩耍啦!!!

AR的使用

对象库里面每一个对象的名称的值是一个与的关系,必须全部符合条件了,才认为是找到了这个组件,权重只有0和100,0表示不校验,100表示校验

拿到参数表的信息

  • ar.getParameterDataList(“test01.xls”),test01是当前脚本名称
  • pd.getFrom(“username”),username是参数表中的列名
for(ParameterData pd : ar.getParameterDataList("test01.xls"))
{
ar.parameterData=pd; //ar.parameterData可用于脚本之间传递参数
ar.openURL("http://localhost:8080/login");
ar.browser("vue").clickControl("INPUT");
ar.browser("vue").setValue("INPUT", pd.getFrom("username")); //username是列名
}
需要其他快捷功能,右键即可

PR的使用

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进行定位,调用判断元素开头以及结束或者内容进行定位(其实就是找规律)

其他

  • 加滚动进行定位
  • 元素未加载完成,使用等待完成定位
  • 元素在iframe子页面中需要切换
  • 元素在不同的页面中需要切换
  • 警告框,选择框特殊元素标签需要进行特殊处理

元素的操作:

  • 点击元素:click()
  • 输入内容:send_keys()
  • 清除文本:clear

元素属性获取

  • 元素大小:size
  • 元素文本:text
  • 获取属性值:get_attribute()
  • 元素是否可见:is_display
  • 元素是否可用:is_enabled()

等待

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

强制等待

  • 通过time.sleep(5)
  • 固定等待5秒钟

隐式等待

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

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

原理:

  • 元素在第一次就定位到的时候不会触发隐式等待的时长,直接操作元素
  • 如果第一次定位失败,那么会触发隐式等待的有效时长
  • 如果在有效时长定位到元素,那么执行操作
  • 如果在有效时长没有定位到元素,那么会报错:NoSuchElementException

显式等待

使用方式:
导包

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']")))

原理

  • 每隔一定的时间不断尝试查找元素
  • 找到了就返回元素
  • 未找到就会报错:TimeoutException

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