ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UI自动化测试((弹出框)alert实战、(鼠标事件)ActionChains类实战、wait类实战)

2021-12-03 19:33:30  阅读:251  来源: 互联网

标签:实战 webdriver ActionChains selenium driver alert sleep import element


一、alert实战

        在UI的自动化测试实战中,针对弹出框的处理,主要使用的是Alert的类这部分,在JavaScript的技术体系中,针对弹出框的部分,主要涉及到Alert警告框,Confirm确认框,Prompt消息框。下来主要详细的说下Alert里面每个方法的具体使用在Alert的类里面,涉及到的方法以及方法的作用主要汇总为如下:

text:获取弹出框的文本信息

accept:接受Confirm弹出框

dismiss:拒绝接受Confirm弹出框

send_keys:在Prompt消息对话框里面输入想要输入的内容

1.警告框

比如我们用代码写一个html警告框,代码如下:

<!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 #调用Alert类
from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/%E6%B6%88%E6%81%AF%E7%A1%AE%E8%AE%A4%E6%A1%86.html')
t.sleep(3)
driver.find_element_by_xpath('/html/body/div/input').click()
t.sleep(3)
#Alert类的方法
print(Alert(driver=driver).text)
#第二种调用alert类里面的方法
print(driver.switch_to.alert.text)
t.sleep(3)
driver.quit()

 如上的代码执行后,调用text的方法,就能够获取到该警告框的文本信息,输出结果信息为:

我是一个消息框
我是一个消息框

 

2.确认框

 针对确认框的交互,一般都是会弹出确定或者是取消的交互,如果是确定,调用的的方法是accept,如果是取消,调用

的方法是dismiss的方法。

比如我们写一个确认框的代码如下:

<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 import webdriver
import time as t
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/alert%E5%AE%9E%E6%88%98/%E7%A1%AE%E8%AE%A4%E6%A1%86.html')
t.sleep(2)
driver.find_element_by_xpath('/html/body/center/input').click()
t.sleep(2)
driver.switch_to.alert.accept() #点击确认按钮
t.sleep(2)
#刷新
driver.refresh()
driver.find_element_by_xpath('/html/body/center/input').click()
t.sleep(2)
driver.switch_to.alert.dismiss() #点击取消按钮
t.sleep(2)
driver.quit()

3.消息对话框

消息消息对话框主要显示的是与用户交互的信息,那么调用的方法就是send_keys(),它的交互具体如下:

 

 

这部分的html的代码如下:

<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.maximize_window()
driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/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_css_selector('body > center > input[type=button]').click()
t.sleep(2)
driver.switch_to.alert.send_keys('wuya')
t.sleep(2)
driver.switch_to.alert.accept()
t.sleep(2)
driver.quit()

二、ActionChains类实战

ActionChains主要是针对鼠标事件的处理,在鼠标事件中常用的交互为悬浮,双击,以及右键等操作。如果想使用ActionChains的类,首先需要导入它,导入的命令为:

from selenium.webdriver.common.action_chains import ActionChains

1.悬浮

悬浮的交互这地方就以百度搜索的设置来案例,鼠标悬浮到设置,就会显示出下拉框的内容信息,具体交互信息如下:

 

 

下面就用代码实现这部分交互,具体代码如下:

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(5)
#点击保存设置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
t.sleep(5)
print(driver.switch_to.alert.text)
t.sleep(3)
#点击确定后跳转到首页
driver.switch_to.alert.accept()
t.sleep(5)
driver.quit()

2.右键

右键使用到的方法为context_click() 的方法,下面就以百度网盘为案例,来演示右键的操作,具体实现的代码为:

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://pan.baidu.com/')
t.sleep(5)
#点击短信快捷登录
driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__smsSwitchWrapper"]').click()
t.sleep(5)
#输入手机号
driver.find_element_by_id('TANGRAM__PSP_4__smsPhone').send_keys('15191084297')
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)
#针对ActionChains类进行实例化操作
obj=ActionChains(driver=driver)
#获取元素属性的对象
wodeziyuan=driver.find_element_by_xpath('//*[@id="layoutMain"]/div[2]/div[3]/div/div/dd[7]/div[2]/div[1]/a')
t.sleep(5)
#右键点击我的资源
obj.context_click(wodeziyuan).perform()
t.sleep(5)
driver.quit()

3.鼠标双击

         double_click一般主要应用于数据的交互方面,比如添加用户姓名的按钮,假设程序规定用户名称是唯一的,那么双击后是否插入了两条用户名称一样的信息了,这就需要来验证,提交数据后,然后在数据列表中使用用户名称来查询,查看是否存在两条数据,一般而言,前后端的程序员都是会处理这些的,但是作为测试我们还是需要验证这些测试场景。下面主要结合百度搜索来作为案例,具体代码如下:

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(3)
obj=ActionChains(driver=driver)
driver.find_element_by_id('kw').send_keys('彭于晏')
t.sleep(3)
so=driver.find_element_by_id('su')
#双击
obj.double_click(so).perform()
t.sleep(8)
driver.quit()

三、wait实战

       在UI的自动化测试中,经常会由于网络加载慢的问题导致资源加载不出来,从而影响测试的效率,之前我们对这样的处理方案是使用了time库里面的sleep()方法来休眠几秒钟,但是这样的方式毕竟不是很好的解决方案。在UI自动化测试中,关于等待的部分,主要汇总为如下三点,具体如下:

1、固定等待,也就是使用sleep()方法

2、隐式等待,使用到的方法是implicitly_wait的方法,可以把它理解为设置最长等待时间

3、显式等待,主要指的是程序每隔一段时间执行自定义的程序判断条件,如果判断成立,程序就会继续执行,那么如果判断失败,就会报TimeOutExpection的异常信息

1.指定元素文本的位置

这个方法主要应用于错误文本信息的验证,我们首先需要错误文本信息显示出来才能够进行断言的验证,使用到的方法为:text_to_be_present_in_element,下面我们主要是以sina email为案例来演示下这部分的具体应用,具体代码如下:

 

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://mail.sina.com.cn')
driver.find_element_by_link_text('登录').click()
divText=WebDriverWait(driver=driver,timeout=10).until(method=es.element_to_be_clickable((By.XPATH,'/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')))
assert  divText.text=='请输入邮箱名'
driver.quit()

 

2.关于元素是否可见

这里以百度首页的关于百度为案例,使用到的方法为:visibilty_of_element_located,具体实现的源码为:

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.baidu.com')
driver.implicitly_wait(30)
aboutBaidu=WebDriverWait(driver=driver,timeout=10).until(method=es.element_to_be_clickable((By.LINK_TEXT,'关于百度')))
#判断存在后点击关于百度
aboutBaidu.click()
driver.quit()

标签:实战,webdriver,ActionChains,selenium,driver,alert,sleep,import,element
来源: https://www.cnblogs.com/yingyingShare/p/15639725.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有