12.3
在UI的自动化测试实战中,针对弹出框的处理,主要使用的是Alert的类这部分,在JavaScript的技术体系中,针对弹出框的部分,主要涉及到Alert警告框,Confirm确认框,Prompt消息框。下来主要详细的说下Alert里面每个方法的具体使用,具体源码如下:
点击查看代码
在Alert的类里面,涉及到的方法以及方法的作用主要汇总为如下:
text:获取弹出框的文本信息
accept是接受Confirm弹出框
dismiss是拒绝接受Confirm弹出框
send_keys是在Prompt消息对话框里面输入想要输入的内容
text:获取弹出框的文本信息
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function func() {
alert("我是一个消息框")
}
</script>
</head>
<body>
<div>
<input type="button" onclick="func()" value="显示消息框">
</div>
</body>
</html>
from selenium.webdriver.common.alert import Alert
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
# driver.maximize_window()
driver.get('file:///D:/code/testdev/Alert%E5%AE%9E%E6%88%98/alert.html')
t.sleep(2)
driver.find_element_by_xpath('/html/body/div/input').click()
t.sleep(2)
# Alert类的方法
# print(Alert(driver=driver).text)
# 第二种调用Alert类的方法
print(driver.switch_to.alert.text)
t.sleep(2)
driver.quit()
消息对话框
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function disp_prompt()
{
var name=prompt("请输入您的姓名:","")
if(name!=null && name!="")
{
document.write("Hello "+name+"!")
}
}
</script>
</head>
<body>
<center>
<input type="button" onclick="disp_prompt()" value="请点击我!">
</center>
</body>
</html>
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.get('file:///D:/code/testdev/Alert%E5%AE%9E%E6%88%98/%E6%B6%88%E6%81%AF%E5%AF%B9%E8%AF%9D%E6%A1%86.html')
t.sleep(2)
driver.find_element_by_xpath('/html/body/center/input').click()
t.sleep(2)
driver.switch_to.alert.send_keys('tian')
t.sleep(2)
driver.switch_to.alert.accept()
t.sleep(2)
driver.quit()
确认框
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function disp_confirm()
{
var r=confirm("请您点击按钮!")
if(r==true)
{
document.write("您点击了确认按钮")
}
else
{
document.write("您点击了取消按钮")
}
}
</script>
</head>
<body>
<center>
<input type="button" onclick="disp_confirm()" value="请点击">
</center>
</body>
</html>
from selenium.webdriver.common.alert import Alert
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
# driver.maximize_window()
driver.get('file:///D:/code/testdev/Alert%E5%AE%9E%E6%88%98/%E7%A1%AE%E8%AE%A4%E6%A1%86.html')
t.sleep(2)
driver.find_element_by_css_selector('body > center > input[type=button]').click()
t.sleep(2)
driver.switch_to.alert.accept()
t.sleep(3)
# 刷新
driver.refresh()
driver.find_element_by_css_selector('body > center > input[type=button]').click()
t.sleep(2)
driver.switch_to.alert.dismiss()
t.sleep(2)
driver.quit()
悬浮
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.sina.com.cn/')
t.sleep(3)
#获取到移动客户端元素属性
locator=driver.find_element_by_xpath('//*[@id="SI_Top_Wrap"]/div/div/div/div[1]/div[4]/a/i')
action=ActionChains(driver=driver)
action.move_to_element(locator).perform()
t.sleep(5)
driver.quit()

双击
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
# driver.maximize_window()
driver.get('https://www.hao123.com/')
driver.implicitly_wait(30)
t.sleep(5)
obj=ActionChains(driver=driver)
driver.find_element_by_name('word').send_keys('芜湖')
t.sleep(5)
so=driver.find_element_by_xpath('//*[@id="search"]/form/div[3]/input')
# 双击
obj.double_click(so).perform()
t.sleep(3)
driver.quit()
鼠标事件
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
t.sleep(2)
# 针对ActionChains进行实例化
obj=ActionChains(driver=driver)
settings=driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
obj.move_to_element(settings).perform()
t.sleep(3)
# 点击搜索设置
driver.find_element_by_xpath('//*[@id="s-user-setting-menu"]/div/a[1]').click()
t.sleep(3)
# 点击保存设置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
t.sleep(3)
print(driver.switch_to.alert.text)
t.sleep(3)
# 点击确定后,页面跳转到首页
driver.switch_to.alert.accept()
t.sleep(3)
driver.quit()


右键
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://pan.baidu.com/')
t.sleep(3)
# 点击短信快捷登录
driver.find_element_by_id('TANGRAM__PSP_4__smsSwitchWrapper').click()
t.sleep(5)
# 输入手机号码
driver.find_element_by_id('TANGRAM__PSP_4__smsPhone').send_keys('13488083353')
t.sleep(5)
# 点击发送验证码
driver.find_element_by_id('TANGRAM__PSP_4__smsTimer').click()
t.sleep(30)
# 点击登录
driver.find_element_by_id('TANGRAM__PSP_4__smsSubmit').click()
t.sleep(15)
obj=ActionChains(driver=driver)
# 获取元素属性的对象
gao=driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[2]/div[3]/div/div/dd[3]/div[2]/div[1]')
t.sleep(5)
obj.context_click(gao).perform()
t.sleep(5)
driver.quit()
WebDriverWait类实战
在UI的自动化测试中,经常会由于网络加载慢的问题导致资源加载不出来,从而影响测试的效率,之前我们对这样的处理方案是使用了time库里面的sleep()方法来休眠几秒钟,但是这样的方式毕竟不是很好的解决方案。在UI自动化测试中,关于等待的部分,主要汇总为如下三点,具体如下:
1、固定等待,也就是使用sleep()方法
2、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间
3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执行,那么如果判断失败,就会TimeOutExpection的异常信息。
隐式等待
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as es
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.hao123.com')
driver.implicitly_wait(30)
wait=WebDriverWait(driver=driver,timeout=10).until(method=es.element_to_be_clickable((By.NAME,'word')))
wait.send_keys('hh')
t.sleep(3)
driver.quit()
指定元素的文本位置
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as es
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('https://pan.baidu.com/')
# 点击登录按钮
driver.find_element_by_id('TANGRAM__PSP_4__submit').click()
divText=WebDriverWait(
driver=driver,
timeout=10).until(
es.element_to_be_clickable((
By.XPATH,
'/html/body/div[1]/div[3]/div[6]/div/div[1]/form/p[2]/span')))
t.sleep(3)
assert divText.text=='请您输入手机号/用户名/邮箱'
driver.quit()
关于元素是否可见
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as es
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
aboutBaidu=WebDriverWait(
driver=driver,
timeout=10).until(
es.visibility_of_element_located((
By.LINK_TEXT,
'关于百度')))
# 判断存在后点击关于百度
aboutBaidu.click()
driver.quit()

浙公网安备 33010602011771号