51Testing软件测试论坛

标题: Python3+Selenium3+Unittest 登录验证实战 [打印本页]

作者: lsekfe    时间: 2022-3-7 11:16
标题: Python3+Selenium3+Unittest 登录验证实战
      Python3+Selenium3+Unittest 登录验证实战[url=]百度[/url]网盘地址:
  https://pan.baidu.com/s/1Np8lglOdOAqcpnREtSL0Zw 密码:f9mj
  Python3+Selenium3+Unittest 登录验证实战:
  · 自动化脚本中添加俩个文件 一个为PageWeb 一个ChanDaoLogin
  · PageWeb文件夹下创建脚本文件PageObject.py文件
  · ChanDaoLogin文件夹下创建脚本文件ChanDaoLogin_page.py

  PageObject.py代码如下:
  from selenium  import webdriver   #导入需要的[url=]selenium[/url]
  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)



  测试结果如下:







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2