selenium 디자인 모델 의 --- PageObject, 자동화 테스트 레이 어 링 디자인 사상

15029 단어 넷.selenium
1. 정의:
페이지 대상PO 디자인 모델 은 selenium 에서 중요 한 디자인 모델 이다.
2. 원리:
한 페이지 의 모든 페이지 요소 와 페이지 작업 을 하나의 페이지 클래스 로 봉 하여 테스트 용례 클래스 에 넣 는 것 이다.수 동 테스트 만 담당 하 는 업무 논리.따라서 기 존의 테스트 용례 류 를 page 와 case 두 부분 으로 나 누 어야 한다.
3. 역할:
전단 페이지 가 바 뀌 면 한 페이지 에서 특정한 페이지 요소 의 포 지 셔 닝 도 달라 집 니 다.만약 에 몇 십, 심지어 몇 백 개의 테스트 사례 에서 이 페이지 요 소 를 사용 하면 코드 를 수정 할 수 없고 PO 의 디자인 은 이 문 제 를 해결 했다.
4. 요약:
1. 케이스 는 테스트 사례 방법 만 포함 하고 이 방법 에 대해 데이터 구동 테스트 를 한다.줄 마다 코드, 대응 하 는 동작
2、 page
  • 요소 포 지 셔 닝: 두 가지 요 소 를 포함 하 는 원 조 를 설명 하고 작업 방식 과 내용 을 저장 합 니 다 [By, Value]
  • login_link_loc = (By.LINK_TEXT, "  ")
    
  • 요소 조작: 하나의 방법 을 설명 하고 요소 에 대한 조작 을 밀봉 합 니 다
  •  def click_login_link(self):
            # self.driver.find_element(By.LINK_TEXT, "  ").click()
            # find_element()        by value.  login_link_loc      ,     
            self.driver.find_element(*self.login_link_loc).click()
    
  • 구조 방법: 테스트 용례 류 를 받 아들 여 브 라 우 저 에 전송 하고 테스트 용례 류 와 같은 브 라 우 저 를 사용 합 니 다
  •     def __init__(self, driver):
            self.driver = driver
    

    5. 코드 구조:
    (1) basetestcase 패키지
    import time
    import unittest2
    from selenium import webdriver
    
    class BaseTestCase(unittest2.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.implicitly_wait(5)
        def tearDown(self):
            time.sleep(20)
    

    (2) page 클래스 패키지
  • login_page.py
  • from selenium import webdriver
    from selenium.webdriver.common.by import By
    from page_object.my_dash_page import MyDashPage
    
    class LoginPage:
        # login_link_loc      ,       
        # int a[2] = {2,3}
        # a = 2   3 ?
        login_link_loc = (By.LINK_TEXT, "  ")
        username_input_loc = (By.ID, "loginform-identity")
        password_input_loc = (By.ID, "loginform-password")
        login_button_loc = (By.NAME, "login-button")
        url = "https://www.xueqingyun.com/"
    
        def __init__(self, driver):
            self.driver = driver
    
        def open(self):
            self.driver.get(self.url)
    
        def click_login_link(self):
            # self.driver.find_element(By.LINK_TEXT, "  ").click()
            # find_element()        by value.  login_link_loc      ,     
            self.driver.find_element(*self.login_link_loc).click()
        def input_username(self, username):
            self.driver.find_element(*self.username_input_loc).send_keys(username)
        def input_password(self, password):
            self.driver.find_element(*self.password_input_loc).send_keys(password)
        def click_login_button(self):
            self.driver.find_element(*self.login_button_loc).click()
            return MyDashPage(self.driver)
    
  • my_dash_page,py
  • from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    class MyDashPage:
        true_name_loc = (By.XPATH, '//*[@id="w7"]/li[2]/a')
        def __init__(self, driver):
            self.driver = driver
        def get_ture_name(self):
            return self.driver.find_element(*self.true_name_loc).text
    

    (3) 케이스 패키지
    import time
    import unittest2
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from base.baseTestCase import BaseTestCase
    from page_object.login_page import LoginPage
    from page_object.my_dash_page import MyDashPage
    
    class TestLogin(BaseTestCase):
        def test_login(self):
            lp = LoginPage(self.driver)
            lp.open()
            lp.click_login_link()
            lp.input_username("username")
            lp.input_password("111111")
            #           ,      ,              
            mdp = lp.click_login_button()
            
            #          ,          
            #mdp = MyDashPage(self.driver) 
            
            #  
            self.assertEqual("   AAA", mdp.get_ture_name())
    
    if __name__ == '__main__':
        unittest2.main()
    

    좋은 웹페이지 즐겨찾기