selenium 자동화 테스트 프레임 워 크 의 PO 디자인 모델

4101 단어
대상 지향 특성: 패키지, 계승, 다 중.자동화 에 도 똑 같이 적용 된다. Selenium 자동화 테스트 에서 PageObject (사상 은 대상 을 대상 으로 하 는 특성 과 같다) 라 는 이름 이 자주 언급 되 는데 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 디자인 모델

좋은 웹페이지 즐겨찾기