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