硒Pytest方法中缺少参数

问题描述

我正在尝试使用seleium和pytest进行网页测试的页面对象设计。我在test_startup.py中不断收到此TypeError admin_login() missing 1 required positional argument: 'driver' 我真的不明白什么是错的。这是代码文件

test_startup.py

from page_objects.login_page import LoginPage
import pytest
from selenium import webdriver

@pytest.fixture(scope='class')
def chrome_driver_init(request):
    chrome_driver = webdriver.Chrome('chrome_driver_path')
    chrome_driver.get('https://url')
    chrome_driver.find_element_by_id('details-button').click()
    chrome_driver.find_element_by_id('proceed-link').click()
    request.cls.driver = chrome_driver

yield
chrome_driver.close()

@pytest.mark.usefixtures('chrome_driver_init')
class TestStartUp:
    def test_login(self):
        driver = self.driver

        LoginPage.admin_login(driver)

login_page.py

import extensions.tools as tools
from selenium.webdriver.common.by import By
import pytest

class LoginPage(object):
    def __init__(self,driver):
        self.driver = driver

    def login(self,driver,username,password):
        tools.find_element_and_send_keys(driver,self.Locators.username,username)
        tools.find_element_and_send_keys(driver,self.Locators.password,password)
        tools.find_element_and_click(driver,self.Locators.submitButton)

    def admin_login(self,driver):
        self.login(driver,'#####','######')

        assert 'Admin Menu' in driver.page_source

    class Locators:
        submitButton = (By.NAME,'login')
        username = (By.NAME,'j_username')
        password = (By.NAME,'j.password')

tools.py中的东西只是我制作的一些函数,使查找元素变得更容易,而这些函数只是返回各种形式的driver.find_element(By.by,'text')。他们还没有给我一个问题

解决方法

感谢Jortega向我指出正确的方向。 解决方案最终是将test_startup.py中的行更改为

LoginPage.adming_login(LoginPage,driver)

只需添加自我,我就需要返回并将所有self。[]更改为login_page.py文件中的LoginPage。[]

在调用时将其添加到方法中比较容易。话虽如此,我个人讨厌这种外观。看到LoginPage在同一行中键入了两次。有没有更好的更令人愉悦的方式来编写此代码?

,

您几乎明白了,只需在驱动程序之前添加self

LoginPage.admin_login(self,driver)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...