数据驱动+PageObject模式

练习要求:

126 邮箱登录 答案:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
class Page(object):
    login_url='http://www.126.com'
    
    def __int__(self,selenium_driver,base_url=login_url):
        self.base_url=base_url
        self.driver=selenium_driver
        self.timeout=30

    def on_page(self):
        return self.driver.current_url ==(self.base_url+self.url)
    def _open(self,url):
        url=self.base_url+url
        self.driver.get(url)
        assert self.on_page(),'Did not land on %s' % url
    def open(self):
        self._open(self.url)
    def find_element(self,*loc):
    return self.driver.find_element(*loc)

class LoginPage(Page):
    url='/'
    username_loc=(By.ID,"idInput")
    password_loc=(By.ID,"pwdInput")
    submit_loc=(By.ID,"loginBtn")
    def type_password(self,password):
        self.find_element(*self.username_loc).send_keys(username)
    def type_password(self,password):
        self.find_element(*self.password_loc).send_keys(password)
    def type_username(self):
        self.find_element(*self.submit_loc).click()

def test_user_login(driver,username,password):
    login_page=LoginPage(driver)
    login_page.open()
    login_page.type_username(username)
    login_page.type_password(password)
    login_page.submit()

def main():
    try:
        driver=webdriver.Firefox()
        username='username'
        password='123456'
        test_user_login(driver,username,password)
        sleep(3)
        text=driver.find_element_by_xpath("//span[@id='spnUid'").text
        assert(text=='username@126.com'),"用户名称不匹配,登录失败!"
        username='username2'
        password='123456'
        test_user_login(driver,username,password)
        sleep(3)
        text=driver.find_element_by_xpath("//span[@id='spnUid'").text
        assert(text=='username2@126.com'),"用户名称不匹配,登录失败!"
    finally:
        #关闭浏览器窗口
        driver.close()
if __name__='__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我会尽力回答你的问题。 首先,需要了解什么是 pytest 和 Page Object 模式。 pytest 是一个基于 Python 的测试框架,它支持参数化测试、测试固件、插件化等功能,可以帮助我们编写高效、可维护的测试脚本。 Page Object 模式是一种设计模式,它将页面的操作和页面元素的定位分离开来,使得测试脚本更加简洁、易于维护。 接下来,我们可以按照以下步骤来编写完整的自动化测试框架: 1. 安装 pytest 和 selenium 库 使用以下命令安装: ``` pip install pytest selenium ``` 2. 创建测试用例 在项目中创建一个 test 目录,然后在该目录下创建一个 test_example.py 文件,编写测试用例。 例如: ```python import pytest from pages.login_page import LoginPage @pytest.mark.usefixtures("setup") class TestLogin: def test_valid_login(self): login_page = LoginPage(self.driver) login_page.login("username", "password") assert "Welcome" in login_page.get_title() def test_invalid_login(self): login_page = LoginPage(self.driver) login_page.login("invalid_username", "invalid_password") assert "Invalid username or password" in login_page.get_error_message() ``` 在上面的示例中,我们使用了 pytest 的装饰器 @pytest.mark.usefixtures("setup"),它用于指定测试用例执行前的前置条件。 我们还使用了 Page Object 模式,将登录页面的操作封装在了 LoginPage 类中。 3. 创建页面对象 在项目中创建一个 pages 目录,然后在该目录下创建一个 login_page.py 文件,编写 LoginPage 类。 例如: ```python from selenium.webdriver.common.by import By class LoginPage: def __init__(self, driver): self.driver = driver self.username_input = (By.ID, "username") self.password_input = (By.ID, "password") self.login_button = (By.ID, "login_button") self.error_message = (By.ID, "error_message") def login(self, username, password): self.driver.find_element(*self.username_input).send_keys(username) self.driver.find_element(*self.password_input).send_keys(password) self.driver.find_element(*self.login_button).click() def get_title(self): return self.driver.title def get_error_message(self): return self.driver.find_element(*self.error_message).text ``` 在上面的示例中,我们使用了 Selenium 的 By 模块来定位页面元素,将页面元素的定位与操作分离开来,使得测试脚本更加简洁、易于维护。 4. 创建 conftest.py 文件 在项目根目录下创建一个 conftest.py 文件,用于定义测试固件。 例如: ```python import pytest from selenium import webdriver @pytest.fixture(scope="session") def setup(request): driver = webdriver.Chrome() driver.maximize_window() request.cls.driver = driver yield driver.quit() ``` 在上面的示例中,我们使用了 pytest 的装饰器 @pytest.fixture,它用于定义测试固件。在该示例中,我们定义了一个名为 setup 的测试固件,它会在测试用例执行前启动 Chrome 浏览器,并将 driver 对象传递给测试用例。 5. 运行测试用例 在项目根目录下打开终端,运行以下命令: ``` pytest test/ ``` 其中,test/ 表示测试用例所在的目录。 完成上述步骤后,我们就可以编写一个完整的自动化测试框架了。当然,这只是一个简单的示例,实际应用中还需要考虑更多的因素,比如测试报告生成、异常处理、数据驱动等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44117248

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值