2022年 11月 3日

Python自动化教程

1.自动化目录结构

2.代码

AntoDriver.py

  1. ''''
  2. @Project: xxx
  3. @Description: webdriver API二次封装封装类
  4. @Time:2019/11/11 18:51
  5. @Author:MING
  6. '''
  7. from selenium import webdriver
  8. from selenium.webdriver.support.select import Select
  9. # 创建类
  10. class AutoDriver():
  11. # 构造初始化方法
  12. def __init__(self):
  13. # 浏览器对象实例化
  14. self.driver = webdriver.Firefox()
  15. # 绑定URL
  16. self.base_url ='http://www.baidu.com/'
  17. #打开URL
  18. def open_url(self,url):
  19. self.driver.get(self.base_url+url)
  20. #全屏
  21. def max_window(self):
  22. self.driver.maximize_window()
  23. #关闭浏览器 close quit
  24. def close_page(self):
  25. self.driver.close()
  26. #八大定位
  27. def find_e_element(self,by,selector):
  28. if by=='id' or by =='i':
  29. return self.driver.find_element_by_id(selector)
  30. elif by=='name' or by=='n':
  31. return self.driver.find_element_by_name(selector)
  32. elif by=='class_name' or by=='c':
  33. return self.driver.find_element_by_class_name(selector)
  34. elif by=='tag_name' or by=='t':
  35. return self.driver.find_element_by_tag_name(selector)
  36. elif by=='link_text' or by=='l':
  37. return self.driver.find_element_by_link_text(selector)
  38. elif by=='partial_link_text' or by=='plt':
  39. return self.driver.find_element_by_partial_link_text(selector)
  40. elif by=='xpath' or by=='x':
  41. return self.driver.find_element_by_xpath(selector)
  42. elif by=='css_selector' or by=='cs':
  43. return self.driver.find_element_by_css_selector(selector)
  44. #警告框
  45. def switch_alert(self,value):
  46. if value=='accept' or value=='a':
  47. return self.driver.switch_to.alert.accept()
  48. elif value=='dismiss' or value=='d':
  49. return self.driver.switch_to.alert.dismiss()
  50. #下拉 by:属性 selector:属性值 val:下拉属性 value:下拉值
  51. def select_value(self,by,selector,val,value):
  52. if val=='value' or val=='v':
  53. return Select(self.find_e_element(by,selector)).select_by_value(value)
  54. elif val=='index' or val=='i':
  55. return Select(self.find_e_element(by,selector)).select_by_index(value)
  56. elif val=='visible_text' or val=='vt':
  57. return Select(self.find_e_element(by,selector)).select_by_visible_text(value)

BasePage.py

  1. ''''
  2. @Project: test_selenium01
  3. @Description: 公共基础类
  4. @Time:2019/11/12 18:05
  5. @Author:MING
  6. '''
  7. from auto_driver.AutoDriver import AutoDriver
  8. class BasePage():
  9. def __init__(self,adr:AutoDriver):
  10. self.dr=adr
  11. # 登录
  12. def test_login(self,username,password):
  13. # 定位用户名输入框并传值
  14. self.dr.find_e_element('n', 'username').send_keys(username)
  15. self.dr.find_e_element('n','password').send_keys(password)
  16. # 勾选保存信息
  17. self.dr.find_e_element('i','remember').click()
  18. # 点击登录按钮
  19. self.dr.find_e_element('n','submit').click()
  20. # 点击登录按钮
  21. def login_but(self):
  22. # 定位登录按钮并点击
  23. self.dr.find_e_element('x', '/html/body/div[1]/div[2]/ul/li[1]/font/a[1]/img').click()
  24. # 用户中心
  25. def user_cen(self):
  26. # 定位用户中心并点击
  27. self.dr.find_e_element('x','/html/body/div[1]/div[2]/ul/li[1]/font/font/a[1]').click()
  28. # 注册点击按钮
  29. def logon_btn(self):
  30. self.dr.find_e_element('x','/html/body/div[1]/div[2]/ul/li[1]/font/a[2]/img').click()
  31. # 注册用户
  32. def logon(self,username,email,password,conform_pwd,msn,qq,tel,tels,iphon,mimatis,pwd_answer):
  33. # 用户名
  34. self.dr.find_e_element('i','username').send_keys(username)
  35. # email
  36. self.dr.find_e_element('i','email').send_keys(email)
  37. # 密码
  38. self.dr.find_e_element('i','password1').send_keys(password)
  39. # 确认密码
  40. self.dr.find_e_element('i','conform_password').send_keys(conform_pwd)
  41. # MSN
  42. self.dr.find_e_element('n','extend_field1').send_keys(msn)
  43. # QQ
  44. self.dr.find_e_element('n','extend_field2').send_keys(qq)
  45. # 办公电话
  46. self.dr.find_e_element('n','extend_field3').send_keys(tel)
  47. # 家庭电话
  48. self.dr.find_e_element('n','extend_field4').send_keys(tels)
  49. # 手机
  50. self.dr.find_e_element('n','extend_field5').send_keys(iphon)
  51. # 密码提示
  52. self.dr.select_value('n','sel_question','v',mimatis)
  53. # 密码问题答案
  54. self.dr.find_e_element('n','passwd_answer').send_keys(pwd_answer)
  55. # 注册
  56. self.dr.find_e_element('c','us_Submit_reg').click()

SuPageUserCen.py

  1. ''''
  2. @Project: test_selenium01
  3. @Description: 子页面类
  4. @Time:2019/11/12 18:06
  5. @Author:MING
  6. '''
  7. from auto_driver.AutoDriver import AutoDriver
  8. from base_page.BasePage import BasePage
  9. class SubPageUserCen(BasePage):
  10. def __init__(self,adrr:AutoDriver):
  11. super().__init__(adrr)
  12. # 安全退出按钮
  13. def safe_quit(self):
  14. # 定位安全退出按钮并点击
  15. self.dr.find_e_element('x','/html/body/div[7]/div[1]/div/div/div/div/a[14]/img').click()

test.py

  1. '''
  2. @Class : test #当前Class名称;
  3. @Authr : Administrator #当前用户名;
  4. @Date : 2020-03-04 15:21 #当前系统日期;
  5. '''
  6. import csv
  7. import time
  8. import unittest
  9. from selenium import webdriver
  10. #******************************************第一种、原生编写***************************************************************#
  11. # 浏览器实例化
  12. from auto_driver.AutoDriver import AutoDriver
  13. from base_page.SuPageUserCen import SubPageUserCen
  14. driver = webdriver.Firefox()
  15. # 打开浏览器
  16. driver.get('https://www.hao123.com/')
  17. # 全屏
  18. driver.maximize_window()
  19. #4.定位百度元素,输入值
  20. driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[2]/input').send_keys('苹果')
  21. #5.点击按钮
  22. time.sleep(2)
  23. driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[3]/input').click()
  24. #6.关闭浏览器
  25. driver.close()
  26. #******************************************第二种、框架编写***************************************************************#
  27. class TestCase(unittest.TestCase):
  28. # 前置
  29. def setUp(self):
  30. # 浏览器实例化
  31. self.driver = webdriver.Firefox()
  32. # 打开浏览器
  33. self.driver.get('https://www.hao123.com/')
  34. # 全屏
  35. self.driver.maximize_window()
  36. # 测试方法
  37. def test_case(self):
  38. #4.定位百度元素,输入值
  39. self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[2]/input').send_keys('苹果')
  40. #5.点击按钮
  41. time.sleep(2)
  42. self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[1]/form/div[3]/input').click()
  43. # 收尾
  44. def tearDown(self):
  45. # 关闭
  46. self.driver.close()
  47. #******************************************第三种、框架+PO编写***************************************************************#
  48. # 前置
  49. def setUp(self):
  50. self.d = AutoDriver()
  51. self.s = SubPageUserCen(self.d)
  52. # 全屏
  53. self.d.max_window()
  54. # 收尾
  55. def tearDown(self):
  56. self.d.close_page()
  57. # 测试方法
  58. def test_login(self):
  59. # 打开URL
  60. self.d.open_url('/')
  61. #CSV读取用户数据
  62. csv_r_file = open(r'D:\IDEpycharm\test_selenium01\test_data\login_data.csv', mode='r', encoding='utf-8')
  63. rd = csv.reader(csv_r_file)
  64. for i in rd:
  65. dict_data = {
  66. 'username':i[0],
  67. 'password':i[1]
  68. }
  69. # 定位登录按钮并点击
  70. self.s.login_but()
  71. print("用户名: "+dict_data['username'] + " 密码: "+dict_data['password'])
  72. #用户登录
  73. self.s.test_login(dict_data['username'],dict_data['password'])
  74. time.sleep(2)
  75. # 断言
  76. # 期望值
  77. expect_text = dict_data['username']
  78. # 实际值
  79. try:
  80. self.actual_text = self.d.find_e_element('x','/html/body/div[1]/div[2]/ul/li[1]/font/font/font').text
  81. except:
  82. print('登录失败,后面代码块不执行,请查看')
  83. # 断言判断
  84. self.assertEqual(expect_text,self.actual_text,'使用正确账号hjm/123456,登录失败!')
  85. # 定位用户中心并点击
  86. self.s.user_cen()
  87. time.sleep(0.5)
  88. # 定位安全退出按钮并点击
  89. self.s.safe_quit()
  90. time.sleep(3)
  91. # 文件关闭
  92. csv_r_file.close()

login_data.csv

admin,123456