重庆市软件测试技能大赛——自动化测试(Selenium)篇

声明如下个人学习笔记,可以作为复习参考等看一看,在此分享:

自动化测试(selenium)篇

①点击操作------.click()方法 是点击元素的正中心

②输入操作------.send_keys()方法

使用时先清楚原有内容:.clear() → 在进行输入操作

③获取元素内信息(属性名,ID内容)操作------.get_attribute()

eg:如获取输入框内未输入时显示的内容eg:print(element.get_attribute('placeholder'))

.get_attribute('outerHTML')获取整个HTML内容

.get_attribute('interHTML')获取属性内部HTML内容

页面最大化:driver.maximize_window()

CSS 表达式:

  1. CSS Selector语法选择元素原理:

通过CSS选择单个元素的方法是:find_element(By.CSS_SELECTOR,'CSS Selector参数')

find_element(By.CSS_SELECTOR,'CSS Selector参数')

class用 --- .类名

ID用 --- #ID名

2.精确查找使用(限制范围):

① 使用“>”来层层套接,使得精准查找

②不使用“>”时,使用空格代替 “>” 表示前者内部所有元素都可查询到

比如要选择上面的a元素,就可以使用 [href="http://www.miitbeian.gov.cn"] 。

这个表达式的意思是,选择 属性href值为 http://www.miitbeian.gov.cn 的元素。

“和”:一次性选择俩个或两个以上的元素,使用 “ ,” 隔开

3.按照次序查找元素:
根据次序来选择元素节点

xxx>span:nth-child(1) 在xxx的子元素里找到第一个为span元素

xxx>span:nth-last-child(1) 在xxx子元素里找到倒数第一个为span元素

p:nth-of-type(2) 在所有元素里找到第二个且类型为p的元素

span:nth-of-type(3) 在所有元素里找到第三个且类型为span的元素

p:nth-last-of-type(4) 在所有元素里找到倒数第四个且类型为span的元素

p:nth-child(even) 找到第偶数个类型为p的元素

p:nth-child(odd) 找到第奇数个类型为p的元素

兄弟关系节点

选择 h3 后面紧跟着的兄弟节点 span。

这就是一种 相邻兄弟 关系,可以这样写 h3 + span 表示元素 紧跟关系的 是 加号

h3 + span:表示选择与 h3 紧跟着的span标签

h3 ~ span:表示选择 h3 后面所有的 span 标签

frame内部元素操作

(1)要想实现窗口切换,必须要先使用wd.switch_to.frame('frame1')或者wd.switch_to.frame(wd.find_element(By.TAG_NAME, "iframe")),这时就可操作frame元素内容了

当操作完了之后退出frame使用wd.switch_to.default_content()

切换到新的窗口

解释:在网页上操作的时候,我们经常遇到,点击一个链接 或者 按钮,就会打开一个 新窗口

当打开一个新的页面后,但我们的Webdriver内容还是指向(停留)在旧窗口里的,这是我们使用 wd.switch_to.window(handle) 来获取新窗口的内容

这时使用 window_handles 属性 ,该属性包括了浏览器里面所有的窗口句柄(句柄,可以想象成对应网页窗口的一个ID,)

eg:for handle in wd.window_handles:

# 先切换到该窗口

wd.switch_to.window(handle)

# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口

if 'Bing' in wd.title:

# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,

break

代码的用意就是:

我们依次获取 wd.window_handles 里面的所有 句柄 对象, 并且调用 wd.switch_to.window(handle) 方法,切入到每个窗口,

然后检查里面该窗口对象的属性(可以是标题栏,地址栏),判断是不是我们要操作的那个窗口,如果是,就跳出循环。

在新窗口操作结束后,回到原窗口使用 mainWindow = wd.current_window_handle

wd.switch_to.window(mainWindow)

进行切换

selenium
选择框

(1)radio框:

radio框选择选项,直接用WebElement的click方法,模拟用户点击就可以了

(2)checkbox框:

对checkbox进行选择,也就是直接用WebElment的click()方法,模拟用户点击选择

①首先把已选中的选项,全部自动化点击一遍,确保都是未选状态

eg:

elements = wd.find_elements(By.CSS_SELECTOR,

'#s_checkbox input[name="teacher"]:checked')

for element in elements:

element.click()

wd.find_element(By.CSS_SELECTOR,

"#s_checkbox input[value='小雷老师']").click()

(3)select框:

select内标签不像radio框和checkbox框都是input元素,只是type不同而已,而select框里的标签为select,所有Selenium专门提供了一个Select类进行操作

①select_by_value

根据选项的 value属性值 ,选择元素。

②select_by_index

根据选项的 次序 (从1开始),选择元素

③select_by_visible_text

根据选项的 可见文本 ,选择元素。

④deselect_by_value

根据选项的value属性值, 去除 选中元素

⑤deselect_by_index

根据选项的次序,去除 选中元素

⑥deselect_by_visible_text

根据选项的可见文本,去除 选中元素

⑦deselect_all

去除 选中所有元素

※select单选框:

不管原来选的是什么,直接用Select方法选择即可。

※select多选框:

1.某几个选项,要注意去掉原来已经选中的选项

2.然后再通过 select_by_visible_text方法 选择 小雷老师 和 小凯老师。

eg:

导入Select类

from selenium.webdriver.support.ui import Select

创建Select对象

select = Select(wd.find_element(By.ID, "ss_multi"))

select.deselect_all()

select.select_by_visible_text("小雷老师")

select.select_by_visible_text("小凯老师")

冻结网站临时显示页面(移动光标时消失)

在 开发者工具栏 console 里面执行如下js代码:

setTimeout(function(){debugger}, 5000)

这句代码什么意思呢?

表示在 5000毫秒后,执行 debugger 命令

4.PO模式(page Object):

一般PO模式项目下设置三个package(包)分别是

1. Base 用来存储元素定位、输入、点击(对象库层)

2.PageObject 用来存储元素操作方法,和记载页面(操作层)

3.TestCase 用来存储当前自动化的测试类(unittest,ddt,断言)(业务层)

eg:PO(三层):

对象库层

逻辑层

业务层

元素定位、输入、点击(导入webdriver)

对页面元素进行操作,以及加载页面(导入By,Base里面的BasePage包)

具体传参,对业务进行操作全部完成,以及断言,ddt数据驱动

在PO模式下截取当前页面的图片:

kaca = os.path.join(r'C:\Users\HP\Desktop', 'taobao.png') driver.save_screenshot(kaca)

步骤:导入OS包(import os)>>> 使用os.path.join方法输入kaca =(保存路径,命名)>>>driver.save_screenshot(kaca)

一般写在PO模式的PageObject包里

多条用例进行测试:

对每一条用例输入一条用例数据进行测试 如:

PO模式下设置智能等待时间

# 设置智能等待时间,这里设置为10秒

wait = WebDriverWait(driver, 10)

# 使用WebDriverWait和expected_conditions来等待某个元素出现

element = wait.until(EC.presence_of_element_located((By.ID, "my_element_id")))

Unittest测试完成生成HTML测试报告:

#在test_add.py的父文件夹同级创建test_report文件夹(run_test也在test_report文件夹下) import unittest from HTMLTestRunner import HTMLTestRunner if __name__ == '__main__': ToHtml = unittest.defaultTestLoader.discover('../test_case', pattern='test_add.py') with open('../test_report02/test01_add.html', 'wb') as f: runner = HTMLTestRunner(stream=f, title='Test Report', description='erp test', verbosity=2) runner.run(ToHtml)

以上为本人笔记,仅以参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值