python环境的搭建
现在市面上的web自动化测试,一般采用python+selenium+unittest+Jenkins的开源组合,python作为开发语言、selenium是自动化测试框架、unittest是负责测试用例的组织、Jenkins负责持续集成,所谓兵马未动,粮草先行,下面我们就先把测试环境搭建起来,本文采用win10系统下搭建。
一、python环境搭建
1、官网下载python3.7.x的版本:https://www.python.org/,下载windows版本的可执行版安装包到本地。
2、Python 安装,体验傻瓜一样的快感,路径不喜欢可以在Customize installation中自定义更改;勾选add python 3.7 to path,省去配置环境变量的麻烦,爽爽哒,贴心哒。
3、按 Win+R 键,输入 cmd 调出命令提示符,输入 python,可以确认:
环境变量是否配置成功
安装的python版本
如果找不到python的安装目录,可以试试:where python
二、selenium环境搭建
在python安装成功之后,selenium的安装显得是那么的简单
1、检查python环境
2、cmd中直接输入:pip3 install selenium,可以导包selenium则表示安装成功
3、浏览器驱动安装:由于执行的脚本需要浏览器驱动来驱动浏览器,所以需要安装相应的浏览器驱动。
WebDriver支持Firefox、IE、Opera、Chrome等浏览器。
浏览器驱动下载地址:
http://chromedriver.storage.googleapis.com/index.html
把驱动添加至系统环境变量Path下,或添加至python安装根目录(Python已添加至系统环境变量)
注意:webdriver的驱动不向下兼容,确定浏览器的版本后下载,尤其是chrome浏览器。
4、编写第一个selenium脚本,能吊起Chrome浏览器并运行通过即可
#导包
from selenium import webdriver
#创建浏览器对象
driver = webdriver.Chrome()
#打开百度首页
driver.get(“https://www.baidu.com”)
#在百度的文本框中输入selenium
Target:对谁进行操作?可以使用他们的属性进行定位
command:找到之后,你要对她干嘛?输入、键入
value:键入啥?abc
driver.find_element_by_id(“kw”).send_keys(“selenium”)
#点击百度按钮
driver.find_element_by_id(“su”).click()
#关闭浏览器
driver.quit()
三、unittest环境搭建
unittest是python自带的一个单元测试框架,能够正常导包即可。
四、Jenkins环境搭建
1、 Jenkins下载:https://jenkins.io/zh/download/
2、 Jenkins安装:解压下载的压缩包,直接点击msi文件安装即可
3、 Jenkins启动及插件安装:
浏览器地址栏中输入:http://localhost:8080/,进入成功后会看到如下画面,按提示路径打开密码文件,输入密码:
解锁后需要进行插件的安装,可以自定义也可以默认安装(建议默认即可),时间会比较长。
4、 Jenkins登录用户设置:
5、 Jenkins用户登录:
使用上一步创建的用户和用户密码登录系统即可。
seleniun+webdriver中常见的8种元素定位方法
1.id元素属性 find_element_by_id(“id的属性值”) 最常见的一种元素的定位方法。
2.name属性定位>find_element_by_name(name的属性值)
name属性可能会出现重复,建议开发要保证ID或者那么有一个不能重复。
3、class 属性定位->find_element_by_class_name(“class属性值”)
对某些具有相同类的元素一网打尽的好方法
4、tag name:->find_element_by_tag_name(“标签名”)
重复率高,定位效率低,基本不用
5、link text:->find_element_by_link_text(“链接的显示文本”)
超链接的显示文本信息,较为常用,参数是全部文本信息。
6、partial link text:->find_element_by_partial_link_text(“部分链接的显示文本”)
超链接的显示文本信息,较为常用,参数是部分文本信息即可
7、xpath:->find_element_by_xpath(“xpath”)
Xpath不是selenium专用,只是作为一种定位手段,为selenium所用。Xpath是一门在xml文档中查找信息的语言。Xpath可用来在xml文档中对元素和属性进行遍历。由于html的层次结构与xml的层次结构天然一致,所以使用Xpath也能够进行html元素的定位。
8.7.1、 绝对路径
以/开头,从HTML标签开始,依次遍历HTML结构数的节点,直到找到要定位的页面元素,如百度首页的百度文本框的绝对路径,一般万不得已不使用。为:/html/body/div/div/div[3]/div/div/form/span/input
父子节点是使用/连接,从上往下依次遍历
兄弟节点是[]表示兄弟的排行,比如同一级别上有2个以上的input标签,input[2]就是排在第二位的,排行老大可以写为:input或者是input[1]
from selenium import webdriver
import time
import unittest
class login1(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.get('http://localhost:8088/verydows/index.php')
self.driver.implicitly_wait(5)
def test_01(self):
self.driver.find_element_by_xpath('//*[@id="top-userbar"]/a[1]').click()
self.driver.find_element_by_id('username').send_keys('admin1')
self.driver.find_element_by_id('password').send_keys('123456')
self.driver.find_element_by_id('captcha').send_keys('aaaa')
self.driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
time.sleep(5)
def test_02(self):
self.driver.find_element_by_xpath('//*[@id="top-userbar"]/a[1]').click()
self.driver.find_element_by_id('username').send_keys('admin2')
self.driver.find_element_by_id('password').send_keys('123456')
self.driver.find_element_by_id('captcha').send_keys('aaaa')
self.driver.find_element_by_xpath('//*[@id="login-form"]/div/a').click()
time.sleep(5)
aa='http://localhost:8088/verydows/index.php?c=user&a=login'
bb=self.driver.current_url
self.assertEqual(aa,bb,'两次断言不一致')
time.sleep(3)
def tearDown(self):
self.driver.quit()
if __name__=="__main__":
unittest.main()