day 37 (1226): 업로드 작업, 수요 분석
프레임선반 PO 모드 - pageObject - 페이지 대상 웹 페이지 테스트 - 테스트 용례: 모두 페이지 에서 작 동 하 는 테스트 용례: 서로 다른 페이지 에서 작 동 하 는 300 개의 테스트 용례 – 30 개의 페이지.
30 개 페이지 – 30 개 페이지 클래스 (속성 과 행위) 를 정의 합 니 다. 행위: 현재 페이지 의 동작 입 니 다.
용례 1 = 페이지 A 의 조작 1 - 페이지 B 의 조작 4 - 페이지 C 의 조작 5 - 페이지 C 의 행위 6
중심 사상: 테스트 대상 과 테스트 사례, 좋 은 점 을 철저히 분리 한다. 1. 페이지 에서 요소 의 포 지 셔 닝, 요소 조작 에 변화 가 생 긴 다.용례 와 무관 하 다.2. 용례 에서 순서 로 변화 가 생 겼 으 며 테스트 대상 과 무관 하 다.
테스트 용례:
"""
======================
@Author:coco
@Time:2019/12/28
@File:home_page.py
@software:PyCharm
======================
"""
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
class HomePage:
#
my_user_name = (By.XPATH,'//a[contains(text()," ")]')
def __init__(self,driver:WebDriver):
self.driver = driver
#
def user_is_existed(self):
"""
, True, , False
"""
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(self.my_user_name))
except:
return False
else:
return True
"""
======================
@Author:coco
@Time:2019/12/28
@File:login_page.py
@software:PyCharm
======================
"""
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# 1. wedbriver,
# 2.
class LoginPage:
#
user_input = (By.XPATH,'//input[@name="phone"]')
#
password_input = (By.XPATH,'//input[@name="password"]')
#
login_button = (By.TAG_NAME,'button')
#
error_from_login_form = (By.XPATH,'//div[@class="form-error-info"]')
def __init__(self,driver:WebDriver):
self.driver = driver
#
def login(self,username,passwd):
# ??
WebDriverWait(self.driver,20).until(EC.visibility_of_element_located(self.login_button))
#
self.driver.find_element(*self.user_input).send_keys(username)
self.driver.find_element(*self.password_input).send_keys(passwd)
self.driver.find_element(*self.login_button).click()
#
def error_msg_from_login_form(self):
WebDriverWait(self.driver,20).until(EC.visibility_of_element_located(error_msg_from_login_form()))
return self.driver.find_element(*self.error_from_login).text
"""
======================
@Author:coco
@Time:2019/12/28
@File:test_login.py
@software:PyCharm
======================
"""
import unittest
from selenium import webdriver
import time
from web_20191226.PageObjects.login_page import LoginPage
from web_20191226.PageObjects.home_page import HomePage
import ddt
@ddt.ddt
class TestLogin(unittest.TestCase):
def setUp(self) -> None:
#
self.driver = webdriver.Chrome()
self.driver.maximize_window()
#
self.driver.get("http://120.78.128.25:8765/Index/login.html")
self.lp = LoginPage(self.driver)
def tearDown(self) -> None:
#
self.driver.quit()
def test_login_success(self):
#
# 1、 -
self.lp.login("18684720553","python")
#
# 1、url : http://120.78.128.25:8765/Index/index
time.sleep(2)
self.assertEqual("http://120.78.128.25:8765/Index/index",self.driver.current_url)
# 2、 - 。
self.assertTrue(HomePage(self.driver).user_is_existed())
wrong_datas = [
{"username":"","passwd":"python","check":" "},
{"username": "18684720553", "passwd": "", "check": " "},
{"username": "1868472055", "passwd": "python", "check": " "}
]
@ddt.data(*wrong_datas)
def test_login_failed_by_wrong_datas(self,case):
#
# 1、 -
self.lp.login(case["username"],case["passwd"])
#
self.assertEqual(self.lp.get_error_msg_from_login_form(),case["check"])