web自动化测试常见函数
本节重点:
- 元素定位
- 操作测试对象
- 窗⼝
- 弹窗
- 等待
- 浏览器导航
- ⽂件上传
- 浏览器参数
1. 元素的定位
web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。 常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector
常⽤的主要由cssSelector和xpat
1.1 cssSelector
选择器的功能:选中⻚⾯中指定的标签元素
选择器的种类分为基础选择器和复合选择器,常⻅的元素定位⽅式可以通过id选择器和⼦类选择器来进⾏定位。
定位百度⾸⻚的“百度热搜”元素,可以使⽤通过id选择器和⼦类选择器进⾏定位:#hotsearch-content-wrapper
"搜索输⼊框元素":#kw
"百度⼀下按钮":#su
1.2 xpath
XML路径语⾔,不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点。 xpath使⽤路径表达式来选择xml⽂档中的节点.
xpath语法中:
1.2.1 获取HTML⻚⾯所有的节点
//*
1.2.2 获取HTML⻚⾯指定的节点
//[指定节点]
//ul :获取HTML⻚⾯所有的ul节点
//input:获取HTML⻚⾯所有的input节点
1.2.3 获取⼀个节点中的直接⼦节点
/
//span/input
1.2.4 获取⼀个节点的⽗节点
..
//input/.. 获取input节点的⽗节点
1.2.5 实现节点属性的匹配
[@...]
//*[@id='kw'] 匹配HTML⻚⾯中id属性为kw的节点
1.2.6 使⽤指定索引的⽅式获取对应的节点内容
注意:xpath的索引是从1开始的。
百度⾸⻚通过://div/ul/li[3] 定位到第三个百度热搜标签
更便捷的⽣成selector/xpath的⽅式:右键选择复制"Copy selector/xpath"
注意:元素的定位⽅法必须唯⼀。
案例:百度⾸⻚(需要登陆百度账号)右侧的热搜,复制li标签下的a标签,复制好的的selector为:#hotsearch-content-wrapper > li:nth-child(1),xpath为://*[@id="hotsearch-content-wrapper"]/li[1]
2. 操作测试对象
获取到了⻚⾯的元素之后,接下来就是要对元素进⾏操作了。常⻅的操作有点击、提交、输⼊、清除、获取⽂本。
2.1 点击/提交对象
click()
找到"百度一下"按钮并点击:
#点击对象
#查找元素 + 点击元素
driver.find_element(By.CSS_SELECTOR, "#su").click()
2.2 模拟按键输⼊
send_keys(" ")
# #模拟按键输入send_keys()
# #查找元素 + 输入文本
# driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("xiaomi")
2.3 清除⽂本内容
输⼊⽂本后⼜想换⼀个新的关键词,这⾥就需要⽤到 clear( )
#清楚文本内容
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("哈哈哈")driver.find_element(By.CSS_SELECTOR, "#kw").clear()//如果这里不clear会拼接起来driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("沉浮录")
2.4 获取⽂本信息
如果判断获取到的元素对应的⽂本是否符合预期呢?获取元素对应的⽂本并打印⼀下~~ 获取⽂本信息: .text
# #获取文本信息
text = driver.find_element(By.CSS_SELECTOR, "#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title").textprint(text)
#获取百度一下按钮上的文字 #特殊情况 元素属性值 != 文本信息text = driver.find_element(By.CSS_SELECTOR, "#su").text #这里获取不到”百度一下”的属性值text = driver.find_element(By.CSS_SELECTOR, "#su").get_attribute("value")assert text == "百度一下"print(text)
2.5 获取当前⻚⾯标题和url
.title
.current_url
#获取当前页面的标题 和 URL
title = driver.title
url = driver.current_url
print(title)
print(url)
3. 窗口
3.1窗⼝
curHandle = driver.current_window_handle
allHandle = driver.window_handles
#遍历所有的句柄,切换到新的页面
for handle in allHandle:if handle != curHandle:#切换句柄driver.switch_to.window(handle)
3.2 窗⼝设置⼤⼩
//窗⼝最⼤化
driver.maximize_window()//窗⼝最⼩化
driver.minimize_window()//全屏窗⼝
driver.fullscreen_window()//⼿动设置窗⼝⼤⼩
driver.set_window_size(1024,800)
3.3 切换窗口
3.4 屏幕截图

4. 弹窗
弹窗是在页⾯是找不到任何元素的,这种情况怎么处理?使⽤selenium提供的Alert接⼝
4.1 警告弹窗+确认弹窗
# #切换弹窗
# alert = driver.switch_to.alert
#确认或者取消弹窗
# alert.accept()
# alert.dismiss()
警告弹窗用alert.accept() ,alert.dismiss()都一样,
但是确认弹窗就得选其中一个
4.2 提⽰弹窗
# #提示弹窗---输入框
# driver.get("url")
# driver.find_element(By.CSS_SELECTOR, "").click()
# #输入文本 + 确认+ 取消
# alert = driver.switch_to.alert
# alert.send_keys("找实习")
# alert.accept()
# alert.dismiss()
5. 等待
5.1 强制等待
time.sleep( )
当调用该方法时,程序会直接阻塞,等待指定秒数后会继续执行后续代码,
实际在工作中,业务场景比较复杂时,要添加的自动化脚本非常多,通常来说自动化测试脚本数量可达到上百个。这里假设200个脚本,每个脚本添加若干个等待时间,假设平均等待时间为6秒200*6=1200s 大约20min,这个时间在程序运行时间里算是非常久的,而实际可接受的自动化运行时间为几秒或者几分钟之内
5.2 隐式等待
5.3 显示等待
WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));


ChromeIns = ChromeDriverManager().install()
driver = webdriver.Chrome(service=Service(ChromeIns))
driver.get("https://www.baidu.com")#隐式等待设置为10s,显⽰等待设置为15s,那么结果会是15+10=25s吗?
driver.implicitly_wait(10)
wait = WebDriverWait(driver,15)
start = time.time()#保存到当前时间(时间戳)
try:res = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="haaaaaotsearch-content-wrapper"]/li[1]/a')))#这里专门设置一个找不到的元素让进行等待
except:end = time.time()#保存到当前时间(时间戳)print("no such element")
driver.quit()
print(end-start)

6. 浏览器导航
// 更⻓的⽅法
driver.navigate().to("https://selenium.dev");
// 简洁的⽅法
driver.get("https://selenium.dev")
2)浏览器的前进、后退、刷新
driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();
7. 文件上传
注意:用 \\ 转义字符