• Selenium_Page Object设计模式


    Page Object 介绍

    Page Object设计模式的优点如下:

    •   减少代码的重复
    •   提高测试用例的可读性
    •   提高测试用例的可维护性,特别是针对UI频繁变化的项目

      当Web页面编写测试时,需要操作该Web页面上的元素,如果在测试代码中直接操作HTML元素,那么代码比较脆弱,因为UI频繁变动。可用到page对象封装成一个HTML页面,通过提供的API来操作页面元素。

    Page Object 实例

    下面以登录163邮箱为例实现:

     1 #!/usr/bin/env python
     2 # _*_ coding:utf-8 _*_
     3 __author__ = 'YinJia'
     4 
     5 
     6 from selenium import webdriver
     7 from selenium.webdriver.common.by import By
     8 from time import sleep
     9 
    10 class Page(object):
    11     """
    12     基础类,用于页面对象类的继承
    13     """
    14     login_url = 'https://mail.163.com'
    15     def __init__(self,selenium_driver,base_url=login_url):
    16         self.base_url = base_url
    17         self.driver = selenium_driver
    18         self.timeout = 30
    19 
    20 
    21     def on_page(self):
    22         return self.driver.current_url == (self.base_url + self.url)
    23 
    24     def _open(self,url):
    25         url = self.base_url + url
    26         self.driver.implicitly_wait(10)
    27         self.driver.get(url)
           self.driver.maximize_window()
    28 assert self.on_page(),'Did not land on %s' % url 29 30 def open(self): 31 self._open(self.url) 32 33 def find_element(self,*loc): 34 return self.driver.find_element(*loc) 35 36 class LoginPage(Page): 37 """ 38 163邮箱登录页面模型 39 """ 40 url = '/' 41 #定位器 42 username_loc = (By.NAME,'email') 43 password_loc = (By.NAME,'password') 44 submit_loc = (By.ID,'dologin') 45 46 #Action 47 def type_username(self,username): 48 self.find_element(*self.username_loc).send_keys(username) 49 def type_password(self,password): 50 self.find_element(*self.password_loc).send_keys(password) 51 def submit(self): 52 self.find_element(*self.submit_loc).click() 53 54 def test_user_login(driver,username,password): 55 """ 56 测试获取的用户名/密码是否可以登录 57 """ 58 login_page = LoginPage(driver) 59 login_page.open() 60 driver.switch_to.frame("x-URS-iframe") 61 login_page.type_username(username) 62 login_page.type_password(password) 63 login_page.submit() 64 65 if __name__=='__main__': 66 try: 67 driver = webdriver.Firefox() 68 username = 'username' 69 password = '123456' 70 test_user_login(driver,username,password) 71 sleep(3) 72 driver.switch_to.default_content() 73 text = driver.find_element_by_xpath("//span[@id='spnUid']").text 74 assert(text == 'username@163.com'),'用户名称不匹配,登录失败!' 75 finally: 76 #关闭浏览器窗口 77 driver.close()

         上述代码定义了open()方法用于打开URL网站,但它本身未做的事情,而是交由_open()方法来实现,关于URL断言则交由on_page()方法来实现,而find_element()方法用于元素的定位。LoginPage类中主要对登录页面上元素进行封装。

  • 相关阅读:
    VScode+phpStudy搭建php代码调试环境
    bluekeep漏洞(CVE-2019-0708)利用
    bugku论剑场web解题记录
    upload-labs通关集
    攻防世界web新手区
    Vulnhub-XXE靶机学习
    Volatility取证使用笔记
    攻防世界WEB新手练习
    攻防世界MISC新手练习
    攻防世界CRYPTO新手练习
  • 原文地址:https://www.cnblogs.com/yinjia/p/9503267.html
Copyright © 2020-2023  润新知