1.自动化目录结构
2.代码
AntoDriver.py
''''
@Project: xxx
@Description: webdriver API二次封装封装类
@Time:2019/11/11 18:51
@Author:MING
'''
from selenium import webdriver
from selenium.webdriver.support.select import Select
# 创建类
class AutoDriver():
# 构造初始化方法
def __init__(self):
# 浏览器对象实例化
self.driver = webdriver.Firefox()
# 绑定URL
self.base_url ='http://www.baidu.com/'
#打开URL
def open_url(self,url):
self.driver.get(self.base_url+url)
#全屏
def max_window(self):
self.driver.maximize_window()
#关闭浏览器 close quit
def close_page(self):
self.driver.close()
#八大定位
def find_e_element(self,by,selector):
if by=='id' or by =='i':
return self.driver.find_element_by_id(selector)
elif by=='name' or by=='n':
return self.driver.find_element_by_name(selector)
elif by=='class_name' or by=='c':
return self.driver.find_element_by_class_name(selector)
elif by=='tag_name' or by=='t':
return self.driver.find_element_by_tag_name(selector)
elif by=='link_text' or by=='l':
return self.driver.find_element_by_link_text(selector)
elif by=='partial_link_text' or by=='plt':
return self.driver.find_element_by_partial_link_text(selector)
elif by=='xpath' or by=='x':
return self.driver.find_element_by_xpath(selector)
elif by=='css_selector' or by=='cs':
return self.driver.find_element_by_css_selector(selector)
#警告框
def switch_alert(self,value):
if value=='accept' or value=='a':
return self.driver.switch_to.alert.accept()
elif value=='dismiss' or value=='d':
return self.driver.switch_to.alert.dismiss()
#下拉 by:属性 selector:属性值 val:下拉属性 value:下拉值
def select_value(self,by,selector,val,value):
if val=='value' or val=='v':
return Select(self.find_e_element(by,selector)).select_by_value(value)
elif val=='index' or val=='i':
return Select(self.find_e_element(by,selector)).select_by_index(value)
elif val=='visible_text' or val=='vt':
return Select(self.find_e_element(by,selector)).select_by_visible_text(value)
BasePage.py
''''
@Project: test_selenium01
@Description: 公共基础类
@Time:2019/11/12 18:05
@Author:MING
'''
from auto_driver.AutoDriver import AutoDriver
class BasePage():
def __init__(self,adr:AutoDriver):
self.dr=adr
# 登录
def test_login(self,username,password):
# 定位用户名输入框并传值
self.dr.find_e_element('n', 'username').send_keys(username)
self.dr.find_e_element('n','password').send_keys(password)
# 勾选保存信息
self.dr.find_e_element('i','remember').click()
# 点击登录按钮
self.dr.find_e_element('n','submit').click()
# 点击登录按钮
def login_but(self):
# 定位登录按钮并点击
self.dr.find_e_element('x', '/html/body/div[1]/div[2]/ul/li[1]/font/a[1]/img').click()
# 用户中心
def user_cen(self):
# 定位用户中心并点击
self.dr.find_e_element('x','/html/body/div[1]/div[2]/ul/li[1]/font/font/a[1]').click()
# 注册点击按钮
def logon_btn(self):
self.dr.find_e_element('x','/html/body/div[1]/div[2]/ul/li[1]/font/a[2]/img').click()
# 注册用户
def logon(self,username,email,password,conform_pwd,msn,qq,tel,tels,iphon,mimatis,pwd_answer):
# 用户名
self.dr.find_e_element('i','username').send_keys(username)
# email
self.dr.find_e_element('i','email').send_keys(email)
# 密码
self.dr.find_e_element('i','password1').send_keys(password)
# 确认密码
self.dr.find_e_element('i','conform_password').send_keys(conform_pwd)
# MSN
self.dr.find_e_element('n','extend_field1').send_keys(msn)
# QQ
self.dr.find_e_element('n','extend_field2').send_keys(qq)
# 办公电话
self.dr.find_e_element('n','extend_field3').send_keys(tel)
# 家庭电话
self.dr.find_e_element('n','extend_field4').send_keys(tels)
# 手机
self.dr.find_e_element('n','extend_field5').send_keys(iphon)
# 密码提示
self.dr.select_value('n','sel_question','v',mimatis)
# 密码问题答案
self.dr.find_e_element('n','passwd_answer').send_keys(pwd_answer)
# 注册
self.dr.find_e_element('c','us_Submit_reg').click()
SuPageUserCen.py
''''
@Project: test_selenium01
@Description: 子页面类
@Time:2019/11/12 18:06
@Author:MING
'''
from auto_driver.AutoDriver import AutoDriver
from base_page.BasePage import BasePage
class SubPageUserCen(BasePage):
def __init__(self,adrr:AutoDriver):
super().__init__(adrr)
# 安全退出按钮
def safe_quit(self):
# 定位安全退出按钮并点击
self.dr.find_e_element('x','/html/body/div[7]/div[1]/div/div/div/div/a[14]/img').click()
test.py
'''
@Class : test #当前Class名称;
@Authr : Administrator #当前用户名;
@Date : 2020-03-04 15:21 #当前系统日期;
'''
import csv
import time
import unittest
from selenium import webdriver
#******************************************第一种、原生编写***************************************************************#
# 浏览器实例化
from auto_driver.AutoDriver import AutoDriver
from base_page.SuPageUserCen import SubPageUserCen
driver = webdriver.Firefox()
# 打开浏览器
driver.get('https://www.hao123.com/')
# 全屏
driver.maximize_window()
#4.定位百度元素,输入值
driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[2]/input').send_keys('苹果')
#5.点击按钮
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[3]/input').click()
#6.关闭浏览器
driver.close()
#******************************************第二种、框架编写***************************************************************#
class TestCase(unittest.TestCase):
# 前置
def setUp(self):
# 浏览器实例化
self.driver = webdriver.Firefox()
# 打开浏览器
self.driver.get('https://www.hao123.com/')
# 全屏
self.driver.maximize_window()
# 测试方法
def test_case(self):
#4.定位百度元素,输入值
self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[2]/input').send_keys('苹果')
#5.点击按钮
time.sleep(2)
self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[3]/input').click()
# 收尾
def tearDown(self):
# 关闭
self.driver.close()
#******************************************第三种、框架+PO编写***************************************************************#
# 前置
def setUp(self):
self.d = AutoDriver()
self.s = SubPageUserCen(self.d)
# 全屏
self.d.max_window()
# 收尾
def tearDown(self):
self.d.close_page()
# 测试方法
def test_login(self):
# 打开URL
self.d.open_url('/')
#CSV读取用户数据
csv_r_file = open(r'D:\IDEpycharm\test_selenium01\test_data\login_data.csv', mode='r', encoding='utf-8')
rd = csv.reader(csv_r_file)
for i in rd:
dict_data = {
'username':i[0],
'password':i[1]
}
# 定位登录按钮并点击
self.s.login_but()
print("用户名: "+dict_data['username'] + " 密码: "+dict_data['password'])
#用户登录
self.s.test_login(dict_data['username'],dict_data['password'])
time.sleep(2)
# 断言
# 期望值
expect_text = dict_data['username']
# 实际值
try:
self.actual_text = self.d.find_e_element('x','/html/body/div[1]/div[2]/ul/li[1]/font/font/font').text
except:
print('登录失败,后面代码块不执行,请查看')
# 断言判断
self.assertEqual(expect_text,self.actual_text,'使用正确账号hjm/123456,登录失败!')
# 定位用户中心并点击
self.s.user_cen()
time.sleep(0.5)
# 定位安全退出按钮并点击
self.s.safe_quit()
time.sleep(3)
# 文件关闭
csv_r_file.close()
login_data.csv
admin,123456