Python3+Selenium3+Unittest 登录验证实战百度网盘地址:
https://pan.baidu.com/s/1Np8lglOdOAqcpnREtSL0Zw 密码:f9mj
Python3+Selenium3+Unittest 登录验证实战:
自动化脚本中添加俩个文件 一个为PageWeb 一个ChanDaoLogin
PageWeb文件夹下创建脚本文件PageObject.py文件
ChanDaoLogin文件夹下创建脚本文件ChanDaoLogin_page.py
from selenium import webdriver #导入需要的selenium
from os import path #导入文件处理的包
from selenium.webdriver.common.keys import Keys #导入键盘操作的包
from selenium.webdriver.common.action_chains import ActionChains #导入鼠标操作的包
**#创建界面元素操作公共类**
```bash
class Page_Object:
#写一个构造函数,有一个参数driver 初始化webdirver驱动
def __init__(self,driver):
self.driver=driver
# 编写元素定位方法,多种元素定位进行统一处理
def find_element(self, key, value):
if key == 'id':
return self.driver.find_element_by_id(value)
elif key == 'class':
return self.driver.find_element_by_class_name(value)
elif key == 'name':
return self.driver.find_element_by_name(value)
elif key == 'tag':
return self.driver.find_element_by_tag_name(value)
elif key == 'linkText':
return self.driver.find_element_by_link_text(value)
elif key == 'cssSelector':
return self.driver.find_element_by_css_selector(value)
elif key == 'xpath':
return self.driver.find_element_by_xpath(value)
else:
print('未找到需要定位的页面元素')
#打开需要进行测试的url地址
def open_url(self,url):
self.driver.get(url)
#浏览器页面最大化
def max_window_page(self):
self.driver.maximize_window()
#关闭浏览器页面
def exit_page(self):
self.driver.quit()
#控制浏览器前进
def forward_page(self):
self.driver.forward()
#控制浏览器后退
def back_page(self):
self.driver.back()
#清除定位的文本框内容
def clear_textbox(self,key,value):
self.find_element(key, value).clear()
#向定位到的文本框输入内容
def write_textbox(self,key,value,keys):
self.find_element(key, value).send_keys(keys)
#进行键盘回车操作
def enter(self,key,value):
self.find_element( key, value).send_keys(Keys.ENTER)
#进行键盘复制操作
def enter_control_c(self,key,value):
self.find_element( key, value).send_keys(Keys.CONTROL,'c')
#进行键盘粘贴操作
def enter_control_v(self,key,value):
self.find_element(key, value).send_keys(Keys.CONTROL,'v')
#进行键盘添加空格操作
def enter_space(self,key,value):
self.find_element(key, value).send_keys(Keys.SPACE)
# 进行键盘删除字符操作
def enter_back_space_textbox(self, key, value):
self.find_element(key, value).send_keys(Keys.BACK_SPACE)
#进行鼠标点击操作
def click(self,key,value):
self.find_element(key, value).click()
#通过js代码设置滚动条,进行滚动操作
def gundongtiao(self):
self.driver.execute_script("window.scrollTo(400,800)")
#进行页面截图操作
def get_image(self,ImagePath):
self.driver.get_screenshot_as_file(ImagePath)
#获取元素标题
def get_title(self):
self.driver.title
#获取url地址
def get_url(self):
self.driver.current_url
#获取输入文本框大小
def get_size(self):
self.driver.size
#判断元素是否存在
def get_dispaay(self,key,value):
self.find_element(key,value).is_displayed()
ChanDaoLogin_page.py代码如下:
# * coding: utf-8 *
#导入页面封装好的操作类
from selenium import webdriver #导入selenium包
from PageWeb.PageObject import Page_Object #导入页面操作类
from time import sleep #导入time sleep单位为秒
import unittest #导入unittest包
#该Login类继承页面类Page_Object
class Login(unittest.TestCase):
#unittest初始化函数
def setUp(cls):
cls.driver=webdriver.Chrome() #创建浏览器驱动
cls.PO=Page_Object(cls.driver) #向Page_Object传入driver驱动
cls.PO.max_window_page() #浏览器最大化
cls.PO.open_url('http://127.0.0.1/zentao/user-login.html')
sleep(2) #设置等待时间
#禅道登录成功
def test_chandao_success(self):
self.PO.find_element('id','account').send_keys('admin')
sleep(1)
self.PO.find_element('name','password').send_keys('123456')
sleep(1)
self.PO.click('id','submit')
sleep(1)
user=self.driver.find_element_by_xpath('//*[@id="userMenu"]/a').text
self.assertEqual(user,'admin')
#用户名输入错误
def test_username_error_(self):
self.PO.find_element('id', 'account').send_keys('admin1')
sleep(1)
self.PO.find_element('name', 'password').send_keys('123456')
sleep(1)
self.PO.click('id', 'submit')
sleep(1)
name=self.driver.switch_to.alert.text
self.assertEqual(name,'登录失败,请检查您的用户名或密码是否填写正确。')
#密码输入错误
def test_password_error(self):
self.PO.find_element('id', 'account').send_keys('admin')
sleep(1)
self.PO.find_element('name', 'password').send_keys('12345')
sleep(1)
self.PO.click('id', 'submit')
sleep(1)
name = self.driver.switch_to.alert.text
self.assertEqual(name, '登录失败,请检查您的用户名或密码是否填写正确。')
#用户名,密码输入为空
def test_null_ereor(self):
self.PO.find_element('id', 'account').send_keys('')
sleep(1)
self.PO.find_element('name', 'password').send_keys('')
sleep(1)
self.PO.click('id', 'submit')
sleep(1)
name = self.driver.switch_to.alert.text
self.assertEqual(name, '登录失败,请检查您的用户名或密码是否填写正确。')
#unittest结束函数
@classmethod
def tearDown(cls):
cls.driver.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)