Python & Selenium 자동화 테스트 의 PO 디자인 모델

8260 단어
요약
Page Object 모드 는 다음 에 PO 라 고 부 릅 니 다. 그 는 디자인 사상 입 니 다. 지난 장 에서 자동화 테스트 를 작성 하 는 과정 에서 코드 의 양 이 증가 함 에 따라 대량의 코드 를 유지 하기 어렵 고 확장 하기 어렵 으 며 가 독성 이 매우 떨 어 지 는 등 재난 적 인 사건 을 열거 한 적 이 있 습 니 다.그러면 PO 모델 은 우리 가 일부 문 제 를 해결 할 수 있 는 해결 방안 이다.여기 서 필 자 는 이 를 디자인 모델, 디자인 사상 이 라 고 부 르 고 싶다.Page Object 및 페이지 대상 이란 페이지 대상 은 어떤 것 입 니까?예 를 들 어 하나의 버튼 은 하나의 대상 이 고 한 페이지 도 하나의 대상 이다. 이런 디자인 모델 은 어떤 장점 이 있 습 니까?
만약 에 우리 가 페이지 단위 로 페이지 의 컨트롤 을 일일이 추출 하고 심지어 일부 페이지 의 컨트롤 에 해당 하 는 방법 을 밀봉 하면 우 리 는 테스트 코드 에서 직접 사용 하여 페이지 대상 과 테스트 코드 의 분 리 를 실현 할 수 있다.
추출 한 후에 여러 개의 스 크 립 트 를 같은 페이지 대상 에 사용 할 때 다시 쓰 지 않 고 직접 호출 하면 코드 의 재 활용 성과 가 독성 을 크게 향상 시 킬 수 있 습 니 다.
UI 가 자주 변 하면 테스트 코드 의 유지 가능성 도 높 아 집 니 다. 페이지 대상 이 바 뀌 면 한 곳 만 수정 하면 여러 곳 에서 효력 이 발생 합 니 다.
2. 인 스 턴 스 코드
# encoding = utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


class Page(object):
    """"""
    login_url = 'http://mail.163.com'

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

    def target_page(self):
        return self.driver.current_url == self.base_url

    def _open(self, url):
        url = self.base_url
        self.driver.get(url)
        print(self.driver.current_url)

    def open(self):
        self._open(self.base_url)

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


class LoginPage(Page):
    """
    126      ,     
    """
    url = '/'
    """
                  ,            ,                        
    """
    username_loc = (By.NAME, "email")  #       :      input  
    password_loc = (By.NAME, "password")  #       :     input  
    submit_loc = (By.ID, "dologin")  #       :     button  

    """
                      
    """
    def input_username(self, username):
        self.find_element(*self.username_loc).send_keys(username)  #      

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

    def click_submitbutton(self):
        self.find_element(*self.submit_loc).click()  #       


def user_login(driver, username, password):
    login_page = LoginPage(driver)
    login_page.open()
    sleep(5)
    driver.switch_to.frame(driver.find_element_by_xpath("//*[@id='loginDiv']/iframe"))
    login_page.input_username(username)
    sleep(3)
    login_page.input_password(password)
    sleep(3)
    login_page.click_submitbutton()


def main():
    try:
        driver = webdriver.Chrome()
        username = 'xxxxxx'  #            
        password = 'xxxxxx'  #            
        user_login(driver, username, password)  #         user_login  
        sleep(3)  #    3 
        driver.switch_to.default_content()  #    iframe
        assert_string = driver.find_element_by_xpath("/html/body/div[1]/nav/div[1]/ul/li[1]/span[2]").text
        print(assert_string)
        assert (assert_string == '   ')  #      
    finally:
        driver.quit()  #        


if __name__ == '__main__':
    main()

 
다음으로 전송:https://www.cnblogs.com/davieyang/p/10131249.html

좋은 웹페이지 즐겨찾기