day37(1226):上传操作、需求分析

元素定位,元素操作。
原则:sleep -调试

框架?架子
PO模式 - pageObject -页面对象
web网页测试 -测试用例:全部都是在页面上操作的
测试用例:不同页面当中的操作 串起来的
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"])

你可能感兴趣的:(自动化学习,Web自动化)