Python & Selenium, UI 자동화 테스트 의 PO 디자인 모델 - QQ 메 일 예
6778 단어 소프트웨어 테스트
\ # \ # 전통 테스트 스 크 립 트 의 폐단
테스트 스 크 립 트 분리, 유지 보수 비용 이 높 고 확장 성 이 떨 어 지 는 재 활용 성 이 낮 음 등 PageObject 디자인 모델 selenium 자동화 테스트 프레임 워 크 의 PO 디자인 모델
PO 의 핵심 요소:
PO 모드 에서 BasePage 류 로 추상 적 으로 봉 인 됩 니 다. 이 기본 클래스 는 webdriver 인 스 턴 스 만 실현 하 는 속성 을 가 져 야 합 니 다.모든 페이지 는 BasePage 를 계승 하고 driver 를 통 해 이 페이지 의 요 소 를 관리 하 며 page 의 조작 을 하나씩 밀봉 하 는 방법 입 니 다.TestCase 는 unittest. Testcase 류 를 계승 하고 page 류 에 의존 하여 해당 하 는 테스트 절 차 를 실현 합 니 다.
사례 기초 사례 앞의 기초 장면 에서 선택 한 것 은 QQ 메 일 박스, 편지 쓰기 작업 입 니 다!
공공 방법 류 - 공용 을 봉인 하 는 조작 방법
class DriverUtil(object):
""" """
_driver = None
#
_auto_quit = True
@classmethod
def get_driver(cls):
""" """
if cls._driver is None:
#
cls._driver = webdriver.Chrome()
#
cls._driver.maximize_window()
#
cls._driver.implicitly_wait(10)
#
cls._driver.get('https://mail.qq.com/')
return cls._driver
@classmethod
def quit_driver(cls):
""" """
if cls._auto_quit and cls._driver:
cls._driver.quit()
cls._driver = None
@classmethod
def auto_quit(cls, auto_quit):
""" """
cls._auto_quit = auto_quit
분석 하 다.
가 져 온 드라이버 대상 을 하나의 클래스 에 밀봉 하고 사용 할 때 현재 파일 을 호출 하면 됩 니 다.
페이지 요소 속성 클래스 - 사용 할 모든 요 소 를 액세스 합 니 다.
from selenium.webdriver.common.by import By
class UIElements:
""" """
"""qq """
Account_password_login_btn = (By.ID, 'switcher_plogin') #
input_user_name = (By.ID, 'u') #
input_password = (By.ID, 'p') #
login_button = (By.ID, 'login_button') #
"""qq """
write_a_letter_btn = (By.XPATH, '//*[@id="composebtn"]') #
inbox_btn = (By.ID, 'folder_1') #
""" """
Recipient_input_box = (By.XPATH, "//*[@id='toAreaCtrl']/div[2]/input") #
Subject_input_box = (By.ID, 'subject') #
text_input = (By.XPATH, '/html/body') #
send_btn = (By.XPATH, '//*[@id="toolbar"]/div/a[1]') #
Return_homepage = (By.ID, 'btnbackl') #
""" """
apple_email = (
By.XPATH, '//*[@id="div_showlastweek"]/table[1]/tbody/tr/td[3]/table/tbody/tr/td[1]/nobr/span') #
user_email = (
By.XPATH, '//*[@id="mailContentContainer"]/table/tbody/tr/td/div[1]/table/tbody/tr[4]/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td[1]/a') #
분석 하 다.
모든 페이지 에 필요 한 요소 포 지 셔 닝 속성 은 함께 놓 으 면 관리 하기 편리 합 니 다. 사용 할 때 이 를 호출 하면 됩 니 다. 예 를 들 어 페이지 요소 의 수정 과 이 페이지 요소 의 속성 값 만 수정 하면 됩 니 다.
Base 작업 클래스 - 패키지 주요 작업 방법
from utils import DriverUtil
class Base(object):
"""page """
def __init__(self):
self.driver = DriverUtil.get_driver()
def get_element(self, loc):
"""
( )
:param loc:
:return:
"""
return self.driver.find_element(*loc)
def get_elements(self, loc):
"""
:param loc: (By.ID,id ) (By.CLASS_NAME,class ) (By.XPATH,xpath )
:return:
"""
return self.driver.find_elements(*loc)
def click_element(self, loc):
"""
:param loc: (By.ID,id ) (By.CLASS_NAME,class ) (By.XPATH,xpath )
:return:
"""
self.get_element(loc).click()
def send_element(self, loc, text):
"""
:param loc: (By.ID,id ) (By.CLASS_NAME,class ) (By.XPATH,xpath )
:param text:
:return:
"""
#
input_text = self.get_element(loc)
#
input_text.clear()
#
input_text.send_keys(text)
def get_text_information(self, loc):
"""
:param loc: (By.ID,id ) (By.CLASS_NAME,class ) (By.XPATH,xpath )
:return:
"""
return self.get_element(loc).text
분석 하 다.
이 는 이벤트 방법 을 조작 하기 위해 기 존의 클릭, 입력, 변경 요소 의 텍스트 정 보 를 얻 고 자신 과 결합 하여 사용 할 수 있 으 며 여러 가지 방법 을 자발적으로 추가 할 수 있 습 니 다.(사용 방법 이 필요 할 때 이런 것 을 호출 하면 됩 니 다)
page 클래스 - 페이지 의 모든 작업 을 실현 합 니 다.
"""qq """
from base.base import Base
from page.UIElements import UIElements
import json
import config
import logging
class EmailLoginPage(Base):
def __init__(self):
super().__init__()
def account_password_login(self):
""" """
self.click_element(UIElements.Account_password_login_btn)
def input_username(self, username):
""" """
self.send_element(UIElements.input_user_name, username)
def input_password(self, pwd):
""" """
self.send_element(UIElements.input_password, pwd)
def click_login_btn(self):
""" """
self.click_element(UIElements.login_button)
분석 하 다.
페이지 클래스, 각 페이지 를 나 누 어 각 페이지 에 조작 할 방법 을 기록 하고 페이지 에 따라 나 눕 니 다. (여 기 는 로그 인 페이지 의 모든 조작 방법 과 절 차 를 예 로 들 수 있 습 니 다)
스 크 립 트 클래스 - 페이지 클래스 의 모든 작업 절 차 를 순서대로 실행 합 니 다.
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = DriverUtil.get_driver() #
cls.email_login_page = EmailLoginPage() #
cls.driver.switch_to.frame("login_frame") #
cls.email_login_page.account_password_login() #
@classmethod
def tearDownClass(cls):
DriverUtil.quit_driver() #
def tearDown(self):
time.sleep(3)
def test_login(self ):
self.email_login_page.input_username(“aaaa”) #
self.email_login_page.input_password("11111") #
self.email_login_page.click_login_btn() #
# ,
time.sleep(2)
#
title = self.driver.title
#
self.assertIn(" ", title)
분석 하 다.
스 크 립 트 클래스, 위 페이지 를 실행 하 는 방법, 스 크 립 트 를 실행 합 니 다.
테스트 사례 testcase 의 코드 를 작성 할 때 주로 테스트 사례 로 실 행 된 기능 입 니 다. 장면 에 따라 모든 사례 를 작성 할 수 있 고 전에 말 한 데이터 분리 구동 테스트 데 이 터 를 실현 할 수 있 습 니 다.다양한 읽 기와 호출 을 할 수 있 습 니 다. 유 니 티 스 트 프레임 워 크 를 통 해 테스트 사례 를 계승 합 니 다. TestCase 뒤에 HTML TestRunner 를 사용 하여 테스트 보고 서 를 생 성 합 니 다. 메 일 발송 및 PO 디자인 모델 의 테스트 프레임 워 크 - - - - - -
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
「테스터짱」으로 배우는 소프트웨어 테스트 ⑦초보자 (신인) 용으로 그려진 소프트웨어 테스트의 만화가됩니다. 우연히 JSTQB에 대해 조사했을 때 발견한 블로그의 기사를 계기로 읽게 되었습니다 지금도 업데이트가 있을 때마다 체크하고, 서적판을 읽어 들이거나, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.