作者简介: 笔名,唐米。参与过汇丰银行,国家电网,中国电信等多个大型项目的研发和管理,擅长的技术领域为安全测试,性能测试,自动化框架搭建与维护,曾受南京航空航天大学邀请分享Linux、oracle等测试技术,具备10年开发+测试实战经验,担任过高级软件测试讲师,校企软件技术分享嘉宾。
1、摘要 主要技术点: 1、在项目网页中,以【html分析+selenium定位+python代码+运行结果页面】的模式详解8种元素的定位方法。 2、可以直接套用于项目的自动化框架:以开源项目Agileone为例,讲解一个项目的自动化测试框架如何设计与实现。
2、关键字 Selenium自动化测试、Selenium+unittest+HTMLtestrunner框架设计、Selenium8种元素定位方法。
Selenium初识1.Selenium 简介selenium 是一个 web 的自动化测试工具,通过使用浏览器访问目标站点进而对一个页面上的各个控件进行操作,如对输入框输入内容,对按钮点击,对页面刷新,对单选框,复选框进行点击选择等等操作。很好的实现了用工具模拟人的操作对访问进行自动化测试。在软件测试中可以很好的完成自动化测试,在爬虫中使用,selenium通过驱动浏览器,完全模拟浏览的操作,比如跳转、输入、点击、下拉等进而进行跳转,获取页面有用信息。
2.Selenium使用环境这个要从selenium的使用环境说起,使用selenium的过程中会加载浏览器,比如chrome,则需要在本地加载与浏览器版本匹配的驱动文件。 一、介绍 Selenium作为python的独立的第三方库使用,需要通过pip命令安装,命令如:pip install selenium,核心为webdriver驱动,在py文件中通过from selenium import webdriver导入,导入驱动后赋值给对象driver,通过driver的各种方法操作页面对象。 总结selenium使用环境: 1、python语言环境下 2、浏览器(如chrome) 3、浏览器对应的驱动文件(webdriverchrome.exe) 代码如下: - #导入驱动文件
- from selenium import webdriver
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
复制代码 Selenium 8种方法定位元素Web页面的控件可以通过元素定位的方式获取到,在当前web页面上,鼠标右击查看源码,调出html源代码。通过html中的标签及其属性结合selenium的元素定位方法可以定位到需要的输入框、按钮、链接、图片等页面元素。 ①、通过id定位元素在agileone这个项目中,可以发现用户名的输入框,其中id的值为‘usernmae’,则可以通过find_element_by_id("username")获取到输入框。 可运行代码如下: - from selenium import webdriver
- import time
- # 驱动文件路径
- driver=webdriver.Chrome(r"E:\webdriver\chromedriver.exe")#加载chromedriver驱动
- # 打开百度首页
- driver.get("http://localhost:8081/agileone/")
- # 等待网页打开
- time.sleep(5)
- # 通过id定位s输入框,并且输入内容'admin'
- driver.find_element_by_id("username").send_keys("admin")
- # 等待5秒
- time.sleep(5)
复制代码运行结果: 在用户名输入框输入admin ①、通过name定位元素在agileone这个项目中,可以发现用户名的输入框,其中name的值为‘username’,则可以通过find_element_by_name("wd")获取到输入框。 代码部分: - from selenium import webdriver
- import time
- driver=webdriver.Chrome(r"E:\webdriver\chromedriver.exe")
- driver.get(r"https://www.baidu.com/")
- time.sleep(3)
- driver.find_element_by_name('wd').send_keys('建党100周年')
- driver.find_element_by_id('su').click()
复制代码运行结果: 3、通过tag_name定位元素分析公告管理页面发现,‘内容’的输入框的tag为‘iframe’。通过 - find_element_by_tag_name('iframe')定位到输入框。
复制代码代码如下: - from selenium import webdriver
- from time import sleep
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
- # 打开浏览器
- driver.get('http://localhost:8081/agileone/')
- # 通过以下3行代码完成登录操作
- driver.find_element_by_id('username').send_keys('admin')
- driver.find_element_by_id('password').send_keys('admin')
- driver.find_element_by_id('login').click()
- sleep(3)
- #通过by_partial_link_text定位到公告管理,并且单击进入对应的页面
- driver.find_element_by_partial_link_text('公告管理').click()
- sleep(3)
- #通过by_tag_name定位输入框
- driver.find_element_by_tag_name('iframe').send_keys('我是iframe')
- # 等待5秒
- sleep(5)
复制代码代码运行结果如下: 4、通过class_name定位元素可以通过class的值为‘login-password’唯一定位到密码输入框。 对应的代码: - from selenium import webdriver
- from time import sleep
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
- # 打开浏览器
- driver.get('http://localhost:8081/agileone/')
- # 通过class定位元素,并输入'admin'
- driver.find_element_by_class_name('login-password').send_keys('admin')
- # 等待5秒
- sleep(5)
复制代码运行结果如下,明明框接收到了值。 5、通过link_text在百度页面,‘新闻’等链接有文本信息,比如可以通过文本内容为新闻,定位到新闻链接。 可以采用方法find_element_by_link_text(‘新闻’)。 - from selenium import webdriver
- from time import sleep
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
- # 打开浏览器
- driver.get(r'https://www.baidu.com/')
- # 通过link_text定位元素
- driver.find_element_by_link_text('新闻').click()
- # 等待5秒
- sleep(5)
复制代码运行结果 6、通过partial_link_text通过部分文本也可以定位到元素,比如‘新闻’中的‘闻’字。 代码如下: - from selenium import webdriver
- from time import sleep
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
- # 打开浏览器
- driver.get(r'https://www.baidu.com/')
- # 通过partial_link_text定位元素
- driver.find_element_by_partial_link_text('闻').click()
- # 等待5秒
- sleep(5)
复制代码运行结果如下: 7、通过css定位元素css定位原理同上述,都是根据标签的属性来锁定元素,只是语法不同,但是可以完成更复杂的高级定位。 总结如下: 页面分析: 通过前面分析,我们知道百度的首页中,输入框的id为kw,那么对应的自动化脚本应该如下: 代码部分: - #导入驱动文件
- from selenium import webdriver
- import time
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过xpath定位搜索框,并输入'建党100周年'
- driver.find_element_by_css_selector('#kw').send_keys('建党100周年')
- # 等待5秒
- time.sleep(5)
复制代码 8、通过xpath定位元素Xpath也是定位元素的一种方法,有自己的语法。 页面分析: 通过前面分析,我们知道百度的首页中,输入框的id为kw,那么对应的自动化脚本应该如下: 代码部分: - #导入驱动文件
- from selenium import webdriver
- import time
- # 加载驱动文件的路径
- driver=webdriver.Chrome(r'C:\webdriver\chromedriver.exe')
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过xpath定位搜索框,并输入'建党100周年'
- driver.find_element_by_xpath('//*[@id="kw"]').send_keys('建党100周年')
- # 等待5秒
- time.sleep(5)
复制代码运行结果 Selenium自动化框架设计框架结构:selenium+python+unittest+HTMLTestRunner,该框架可以直接套用于项目中。 1、项目目录结构
1)一级目录一般是项目名称。 2)二级目录有具备的模块,如有a_regist模块,b_login模块等;同时把report报告目录和主程序runner.py也放在二级目录。 3)三级目录是python模块文件,建议取名为test_二级模块名.py。比如test_regist.py、test_login.py。 【注意:二级目录名称前面的a、b字符是为了改变程序运行的顺序,在实际项目中,结构清晰的框架,更方便维护和调用。】
|