PO 모드 디자인 의 basepage 패키지

4962 단어
selenium 이 비교적 유행 하 는 디자인 모델 pageobject 디자인 모델.디자인 이념 은 페이지 를 하나의 유형 으로 디자인 하고 페이지 의 컨트롤 을 속성 으로 하 며 페이지 의 동작 을 방법 으로 한다.
업무 계층: 1. 인터페이스 계층: 인터페이스 구조, 오자 2. 컨트롤 층: 각 컨트롤 의 기능 을 단독으로 검증 합 니 다. 3. 기능 층: 단일 또는 여러 컨트롤 의 조합 작업 이 기능 을 형성 합 니 다. 4. 업무 층: 단일 또는 여러 기능 이 업 무 를 형성 합 니 다.
다음은 basepage 류 의 패 키 징, 즉 모든 페이지 요소 와 페이지 작업 을 base 로 패 키 징 합 니 다.page 클래스 에서 사용 할 때 직접 가 져 옵 니 다.
import time
from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from common.log_utills import logger
class BasePage: def init(self, driver): self.driver = driver
#          -->      
def open_url(self, url):
    self.driver.get(url)
    logger.info('  url  :%s' % url)

def set_browser_max(self):
    self.driver.maximize_window()
    logger.info('      ')

def set_browser_min(self):
    self.driver.minimize_window()
    logger.info('      ')

def refresh(self):
    self.driver.refresh()
    logger.info('     ')

def get_title(self, title):
    value = self.driver.title.text
    logger.info('      :%s' % value)

'''self.username_input_box = {'element_name': '      ','locator_type': 'XPATH',
'locator_value': '//input[@name="account"]','timeout': 3}'''
def find_element(self, element_info):
    locator_element_name = element_info['element_name']
    locator_type_name = element_info['locator_type']
    locator_value_info = element_info['locator_value']
    locator_timeout = element_info['timeout']

    if locator_type_name == 'id':
        locator_type = By.ID
    elif locator_type_name == 'class_name':
        locator_type = By.CLASS_NAME
    elif locator_type_name == 'XPATH':
        locator_type = By.XPATH

    elment = WebDriverWait(self.driver, int(locator_timeout))\
        .until(lambda x: x.find_element(locator_type, locator_value_info))
    logger.info('%s:        ' % locator_element_name)

    return elment

    # WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'kw')))

#   
def click(self, element_info):
    self.find_element(element_info).click()
    logger.info('%s:        ' % element_info['element_name'])

#     
def input(self, element_info, content):
    self.find_element(element_info).send_keys(content)
    logger.info('%s:      【%s】' % (element_info['element_name'], content))

#      
def get_attribute(self, element_info):
    value = self.find_element(element_info).get_attribute('title')
    logger.info('%s:      【%s】' % (element_info['element_name'], value))

#       
def get_text(self, element_info):
    text = self.find_element(element_info).text
    logger.info('%s:          【%s】' % (element_info['element_name'], text))

# franme  
def switch_to_frame(self, frame):
    self.driver.switch_to.frame(frame)
    time.sleep(1)

def switch_to_default_content(self):
    self.driver.switch_to.default_content()
    time.sleep(1)

    #   :frame  、windows    、alert  、      、      )

# windows    
def switch_window_by_title(self, title):
    for handle in self.driver.window_handles:
        self.driver.switch_to.window(handle)
        if self.driver.title.__contains__(title):
            break
    time.sleep(1)

def switch_window_by_url(self, url):
    for handle in self.driver.window_handles:
        self.driver.switch_to.window(handle)
        if self.driver.current_url.__contains__(url):
            break
    time.sleep(1)

# alert  
# 1.alert   
def alert(self, content):
    alert_str = 'alert("%s")' % content
    self.driver.execute_script(alert_str)

# 2.   js  ,       ,    
def switch_to_alert(self):
    alert = self.driver.switch_to.alert
    text = alert.text
    alert.accept()
    logger.info('      :  %s' % text)

#       
# 1.    
def mouse_right_click(self, element_info):
    mouse = ActionChains(self.driver)
    element = self.find_element(element_info)
    mouse.context_click(element).perform()

# 2.     
def mouse_click_and_hold(self, element_info):
    element = self.find_element(element_info)
    ActionChains(self.driver).click_and_hold(element).pause(10).release(element).perform()

#       
def key_board_operate(self, element, operate):
    # element = self.find_element(element_info)
    if operate == 'tab':
        element.send_keys(Keys.TAB)   # 1.  tab 
    elif operate == 'back_space':      # 2.  
        element.send_keys(Keys.BACK_SPACE)
    elif operate == 'ctrl c':
        element.send_keys(Keys.CONTROL, 'c')  #   
    elif operate == 'ctrl v':
        element.send_keys(Keys.CONTROL, 'v')  #   

좋은 웹페이지 즐겨찾기