웹 엔 드 자동화 - selenium Page Object 디자인 모델

4055 단어
Page Object 디자인 모델 의 장점 은 다음 과 같다.
①    코드 의 중복 을 줄이다.
②    테스트 용례 의 가 독성 을 높이다.
③    테스트 용례 의 유지 가능성 을 향상 시 킵 니 다. 특히 UI 의 잦 은 변화 에 대한 항목 입 니 다.
웹 페이지 를 위 한 테스트 를 작성 할 때 이 웹 페이지 의 요 소 를 조작 해 야 합 니 다.그러나 테스트 코드 에서 HTML 요 소 를 직접 조작 하면 UI 가 자주 바 뀌 기 때문에 코드 가 매우 취약 합 니 다.우 리 는 페이지 대상 을 HTML 페이지 로 밀봉 한 다음 에 제공 하 는 응용 프로그램의 특정한 API 를 통 해 페이지 요 소 를 조작 할 수 있 습 니 다. HTML 에서 여기저기 찾 는 것 이 아 닙 니 다.
Page 대상 의 기본 적 인 경험 법칙 은 사람 이 할 수 있 는 모든 일 은 Page 대상 이 소프트웨어 클 라 이언 트 를 통 해 할 수 있다 는 것 이다.따라서 프로 그래 밍 하기 쉬 운 인 터 페 이 스 를 제공 하고 창 밑 에 있 는 위 젯 을 숨겨 야 한다.그래서 텍스트 상자 에 접근 하려 면 접근 방법 을 통 해(accessor method) 문자열 을 가 져 오고 되 돌려 줍 니 다. 체크 상 자 는 불 값 을 사용 해 야 합 니 다. 단 추 는 행동 가이드 의 방법 명 으로 표시 되 어야 합 니 다. Page 대상 은 GUI 컨트롤 에 있 는 모든 데 이 터 를 조회 하고 조작 하 는 행 위 를 방법 으로 봉 해 야 합 니 다. 좋 은 경험 법 은 구체 적 인 컨트롤 을 바 꾸 더 라 도 page 대상 의 인터페이스 가 달라 져 서 는 안 됩 니 다.
비록 이 용 어 는 '페이지' 대상 이지 만 모든 페이지 에 이러한 대상 을 만들어 야 한 다 는 것 을 의미 하 지 는 않 는 다. 예 를 들 어 페이지 에 중요 한 의 미 를 가 진 요 소 는 하나의 페이지 대상 으로 독립 할 수 있다. 경험 법칙 은 페이지 모델 링 을 통 해 응용 프로그램 을 의미 있 게 만 드 는 것 이 목적 이다.
 
인 스 턴 스 코드 는 다음 과 같 습 니 다.
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class Page(object):

# Page , __init__ ,
# , Page 。
# self , Page 。
login_url = 'https://www.126.com'

def __init__(self, selenium_driver, base_url=login_url):
self.base_url = base_url
self.driver = selenium_driver
self.timeout = 30

def on_page(self):
return self.driver.current_url == (self.base_url + self.url)

# _ ,
# import * , , 。
def _open(self, url):
url = self.base_url + url
self.driver.get(url)
assert self.on_page(), 'Did not land on %s' %url

# open , _open()
def open(self):
self._open(self.url)

# loc , *。
# Python , 。
def find_element(self, *loc):
return self.driver.find_element(*loc)

class LoginPage(Page):

# 126
url = '/'
#
# ,
username_loc = (By.CLASS_NAME, "dlemail")
password_loc = (By.CLASS_NAME, "dlpwd")
submit_loc = (By.ID, "dologin")

# Action
def switch_frame(self, loc):
return self.driver.switch_to_frame(loc)

def type_username(self, username):
self.find_element(*self.username_loc).clear()
self.find_element(*self.username_loc).send_keys(username)

def type_password(self, password):
self.find_element(*self.password_loc).send_keys(password)

def submit(self):
self.find_element(*self.submit_loc).click()

def test_user_login(driver, loc, username, password):

# /
login_page = LoginPage(driver)
login_page.open()
sleep(5)
login_page.switch_frame(loc)
login_page.type_username(username)
login_page.type_password(password)
login_page.submit()

def mainTest():

try:
driver = webdriver.Chrome()
username = 'lili1505115417'
password = 'lili123456'
loc = 0
test_user_login(driver, loc, username, password)
sleep(5)
text = driver.find_element_by_id("spnUid").text
assert (text == '[email protected]'), " . !"
finally:
#
driver.quit()
print(' ')

if __name__ == '__main__':
mainTest()



다음으로 전송:https://www.cnblogs.com/linxiu-0925/p/9948039.html

좋은 웹페이지 즐겨찾기