selenium 자동화 테스트 프레임 워 크 의 PO 디자인 모델
\ # \ # 전통 테스트 스 크 립 트 의 폐단
테스트 스 크 립 트 분리, 유지 보수 비용 이 높 고 확장 성 이 떨 어 지 는 재 활용 성 이 낮 음 등 PageObject 디자인 모델 selenium 자동화 테스트 프레임 워 크 의 PO 디자인 모델
PO 의 핵심 요소:
PO 모드 에서 BasePage 류 로 추상 적 으로 봉 인 됩 니 다. 이 기본 클래스 는 webdriver 인 스 턴 스 만 실현 하 는 속성 을 가 져 야 합 니 다.모든 페이지 는 BasePage 를 계승 하고 driver 를 통 해 이 페이지 의 요 소 를 관리 하 며 page 의 조작 을 하나씩 밀봉 하 는 방법 입 니 다.TestCase 는 unittest. Testcase 류 를 계승 하고 page 류 에 의존 하여 해당 하 는 테스트 절 차 를 실현 합 니 다.사례 기초 사례 앞의 기초 장면 은 baidu 검색 페이지 (baidu 페이지 가 간단 하고 테스트 환경 을 구축 할 필요 가 없다) baidu. py 를 선택 했다.
from selenium import webdriver from time import sleep
driver = webdriver.Firefox() driver.get(“http://www.baidu.com”)
driver.find_element_by_xpath("//input[@id=‘kw’]").send_keys(“Bela”) driver.find_element_by_xpath ("/ / input [@ id = 'su']"). click () sleep (5) driver. quit () 는 위의 스 크 립 트 를 baidu. py 파일 에 넣 습 니 다.
분석 은 baidu. py 스 크 립 트 에 대한 분석 을 통 해 추출 할 수 있 습 니 다.
실행 스 크 립 트 환경 에 따라 브 라 우 저 는 다 릅 니 다. 웹 driver. Firefox () 를 구동 하면 박리 할 수 있 습 니 다. 주소 변화 요청 (생산 환경 과 테스트 환경): url = = =http://www.baidu.com벗 겨 질 수 있어 요.
실제 테스트 장면 에서 여러 개의 테스트 장면 이 있 을 수 있 습 니 다. 만약 에 모든 테스트 장면 이 url, 브 라 우 저 구동, 요소 포 지 셔 닝 등 을 유지 해 야 한다 면 효율 이 매우 낮 을 것 입 니 다.
따라서 위의 분석 을 바탕 으로 모든 테스트 페이지 (selenium 자체 가 B / S 시스템 에 대한 테스트) 의 기본 클래스 를 설계 하여 공공 적 인 방법 을 유지 할 수 있 습 니까?이름 을 먼저 정의 합 니 다. BasePage. py, 페이지 공공 방법 및 webdriver 기 존 방법 2 차 패 키 징 등 을 저장 합 니 다.BasePage. py 내용 은 다음 과 같 습 니 다. selenium. webdriver. support. wait import selenium. webdriver. support. wait import WebDriverWait from selenium import webdriver from selenium. webdriver. support import expectedconditions as EC
class BasePage (object): "" BasePage 는 모든 페이지 를 공용 으로 봉인 하 는 방법 입 니 다. 예 를 들 어 driver, Find Element 등 "" \ # BasePage 클래스 를 실례 화 할 때 가장 먼저 실 행 된 것 은 입 니 다.init__방법, 이 방법의 입 참 은 사실 BasePage 류 의 입 참 입 니 다. \ #init__방법 은 반환 값 이 없 으 면 None 로 돌아 갈 수 있 습 니 다.
def __init__(self,selenium_driver,base_url):
self.driver = selenium_driver
self.base_url = base_url
# self.pagetitle = pagetitle
def on_page(self,pagetitle):
return pagetitle in self.driver.title
def _open(self,url):
self.driver.get(url)
self.driver.maximize_window()
def open(self):
self._open(self.base_url,self.pagetitle)
def find_element(self,*loc): #*loc ( )
# return self.driver.find_element(*loc)
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))
return self.driver.find_element(*loc)
except:
print("%s %s "%(self,loc))
def script(self,src):
self.driver.excute_script(src)
def send_keys(self, loc, vaule, clear_first=True, click_first=True):
try:
loc = getattr(self, "_%s" % loc) # getattr self.loc
if click_first:
self.find_element(*loc).click()
if clear_first:
self.find_element(*loc).clear()
self.find_element(*loc).send_keys(vaule)
except AttributeError:
print("%s %s " % (self, loc))
테스트 스 크 립 트 의 최적화 BasePage. py 추출 이 완료 되 었 습 니 다. 그 중에서 BasePage 류 를 설계 하여 일부 webdriver 의 방법 을 두 번 밀봉 하 였 습 니 다.
baidu. py 는 BasePage. py 를 바탕 으로 최적화 (PO 의 디자인 사상 을 충분히 나타 내 고 포장, 계승)
from selenium. webdriver. common. by import By from PODemo. BasePage import BasePage \ # baidu. py, BasePage. py 가 모두 PODemo. BasePage 디 렉 터 리 에 있다 고 가정 합 니 다 from selenium import webdriver
class SearchPage(BasePage):
#
search_loc = (By.ID,"kw")
btn_loc = (By.ID,"su")
def open(self):
self._open(self.base_url)
def search_content(self,content):
BaiduContent = self.find_element(*self.search_loc)
BaiduContent.send_keys(content)
def btn_click(self):
BaiduBtn = self.find_element(*self.btn_loc)
BaiduBtn.click()
PageObject 총괄 selenium 자동화 테스트 프레임 워 크 의 PO 디자인 모델
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.