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()
复制代码运行结果: ③、通过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)
复制代码代码运行结果如下: ④、通过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)
复制代码运行结果如下,明明框接收到了值。 ⑤、通过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)
复制代码运行结果
⑥、通过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)
复制代码运行结果如下: ⑦、通过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)
复制代码⑧、通过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)
复制代码运行结果
|