我是靠谱客的博主 踏实大雁,最近开发中收集的这篇文章主要介绍软件测试之webUI自动化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.一个简单的测试代码


```python
#用例:验证正常登录用例
#功能用例的操作步骤:1. 输入用户名
2. 输入密码
3. 点击的登录
4. 点击取消
#功能用例的预期结果:1. 跳转到首页
2. 首页上显示对应昵称
import time
from selenium import webdriver
#1. 实例化一个webdriver对象
driver = webdriver.Chrome()
driver.implicitly_wait(10)
#2. 加载页面
driver.get('http://localhost/fw')
#3. 根据功能用例的操作步骤,对页面元素进行定位并操作
#3.1 定位用户名输入框,输入用户名
driver.find_element_by_id('login-email-address').send_keys('jason')
#3.2 定位密码输入框,输入密码
driver.find_element_by_id('login-password').send_keys('zgp123456')
#3.3 定位登录按钮,点击登录按钮
driver.find_element_by_id('Iajax-login-submit').click()
#time.sleep(1)
#3.4 定位取消按钮,点击取消按钮
driver.find_element_by_xpath('//*[@id="fanwe_msg_box"]/table/tbody/tr/td[2]/div[3]/input[2]').click()
time.sleep(1)
#4. 断言,检查实际结果与预期结果是否一致
#4.1 考虑页面跳转是否正常,a. 检查页面title
b. 检查页面url
页面如果没有发生跳转,检查页面上有哪些新变化,去检查核心信息
page_element_info = driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div/div[1]/span/span').text
print(page_element_info)
try:
assert page_element_info=='jason','页面信息校验失败!'
print('方维登录-正常登录用例,测试通过!')
except AssertionError as e:
print('方维登录-正常登录用例,测试不通过! %s' %e)
finally:
driver.close()

滚动条的处理
selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了
当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,这时候只能借助Js了,还好selenium提供了一个操作js的方法:execute_script(),可以直接执行js的脚本
链接:https://www.jianshu.com/p/86b886a80dbf
一、控制滚动条高度
1.1 滚动条回到顶部
```python
js="var q=document.getElementById('id').scrollTop=0"
driver.execute_script(js)

1.2 滚动条拉到底部

js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

1.3 滚动条拉到指定位置

target = driver.find_element_by_id("id_keypair")
driver.execute_script("arguments[0].scrollIntoView();", target)

二、scrollTo函数

–scrollHeight 获取对象的滚动高度。
–scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
–scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
–scrollWidth 获取对象的滚动宽度。

2.1 滚动到底部

js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)

2.2 滚动到顶部

js = "window.scrollTo(0,0)"
driver.execute_script(js)

三、select下拉列表定位

<select name="gpc">
<option value="stf" selected="selected">全部时间</option>
<option value="stf=1564625920.617,1564712320.617|stftype=1">最近一天</option>
<option value="stf=1564107520.617,1564712320.617|stftype=1">最近一周</option>
<option value="stf=1562033920.617,1564712320.617|stftype=1">最近一月</option>
<option value="stf=1533176320.617,1564712320.617|stftype=1">最近一年</option>
</select>

方法1 先点击父元素,弹出下拉列表之后,然后再点击子元素

driver.find_element_by_xpath('//*[@id="adv-setting-4"]/select').click()
driver.find_element_by_xpath('//*[@id="adv-setting-4"]/select/option[3]').click()

方法2 先定位父元素,再定位子元素

select_element = driver.find_element_by_xpath('//*[@id="adv-setting-4"]/select')
select_element.find_element_by_xpath('//*[@id="adv-setting-4"]/select/option[3]').click()

方法3 使用selector类
#1. 实例化一个Select对象

select = Select(driver.find_element_by_xpath('//*[@id="adv-setting-4"]/select'))
#select.select_by_value("stf=1564107520.617,1564712320.617|stftype=1")
#select.select_by_index(2)
select.select_by_visible_text('最近一周')

四、动态id
注意:以后一旦碰到id带有数字的,一般这种ID可能是动态变化的。
对于动态ID元素定位的方式不能使用ID来定位,可以使用以下几种方式:
4.1 xpath路径的方式来定位,但是这个xpath路径不能是使用跟这个动态ID有关联的路径。比如:

//[@id=“img_out_306500039”] #不可以
//
[@id=“qlogin_list”]/a/span[4]
#xpath路径从上一级开始进行逐级搜索,这个是可以的。 //*[@class=“img_out”] #保证class是唯一的,这个也可以的

4.2 通过css selector选择器来定位,但css selector不能使用跟这个动态ID相关的,ID样式通过样式,不能使用跟这个动态ID相关的,ID样式通过属性,不能使用动态ID属性

driver.find_element_by_css_selector(#img_out_306500039) #使用了动态ID的样式,不可以
#driver.find_element_by_css_selector(span.img_out)
#使用了class样式,可以,但是class要唯一
driver.find_element_by_css_selector(div[id="qlogin_list"]/a/span[4][class="img_out"])

4.3 先定位父元素,再定位子元素

parent_element = driver.find_element_by_xpath('//*[@id="qlogin_list"]/a[1]')
#定位父元素
parent_element.find_element_by_css_selector(span.img_out)
#再定位子元素

五、多窗口处理
5.1 如何判断是否为一个窗口?通过获取窗口的句柄,看是否有多个句柄,是否有新的句柄,如果有新的句柄,表示有一个新的窗口

#多窗口的处理#如何判断是否为新的窗口
#获取窗口的句柄(一个窗口对应一个句柄,句柄是指向这个窗口)
handles = driver.window_handles
#返回的是一个列表对象

print(handles)
结果:
[
'CDwindow-4482B00295E5D9F37BD79461F3055B2A',
'CDwindow-DB98CA0F85C348ED9282D2D4F870B3B2'
]

5.2 如何跳转到新的窗口

driver.switch_to.window(handles[1])

六、鼠标悬停
在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素。那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChains。
ActionChains可以对需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等进行操作。ActionChains方法列表:

move_to_element(to_element) —— 鼠标移动到某个元素(鼠标悬停)
context_click(on_element=None) —— 点击鼠标右键
double_click(on_element=None)——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
perform() —— 执行链中的所有动作

举个例子

ActionChains(driver).move_to_element(driver.find_element_by_xpath
('//*[@id="header"]/div[2]/div/ul/li[3]/a')).perform()
# 我要借款
# 点击申请贷款
driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/ul/li[3]/div/a[3]').click()

六、内嵌网页的处理(iframe表单的处理)
需要跳转到内勤网页中,然后再去定位元素

driver.switch_to.frame(0) #1. frame名字或id
2. frame的索引第几个 3. 先定位这个frame元素
driver.find_element_by_xpath('/html/body').send_keys('购房借款')
#输入借款描述
先定位到iframe,然后跳转
element = driver.find_element_by_xpath('//*[@id="J_save_deal_form"]/div[1]/div[35]/div/div/div[2]/iframe')
driver.switch_to.frame(element)
跳入iframe处理完成之后,一定要跳出iframe
driver.switch_to.parent_frame()
#跳到上一级的iframe中driver.switch_to.default_content()
#跳到最外层

七、对话框的处理
JavaScript 有三种弹窗 Alert (只有确定按钮), Confirmation (确定,取消等按钮), Prompt (有输入对话框)。

1.accept() 相当于点击弹出框的确定按钮:driver.switchTo().alert.accept();
2.dismiss() 相当于点击弹出框的取消按钮:driver.switchTo().alert.dismiss();
3.SendKeys(String input)针对于prompt情况的输入:driver.switchTo().alert.sendKeys(“可以输入”);
4.getText()获取弹出框文本内容:driver.switchTo().alert.getText();

最后

以上就是踏实大雁为你收集整理的软件测试之webUI自动化的全部内容,希望文章能够帮你解决软件测试之webUI自动化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部