PO 모드 디자인 의 basepage 패키지
업무 계층: 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') #
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.