InvalidArgumentException: Сообщение: неверный аргумент: 'using' должен быть строкой - PullRequest
0 голосов
/ 25 февраля 2020

Я очень плохо знаком с python, пытаясь создать код многократного использования. Когда я пытаюсь вызвать класс Login и функцию login_user в test_main.py, передав все аргументы, которые были использованы в классе Login, я получаю сообщение об ошибке InvalidArgumentException: Сообщение: недопустимый аргумент: «using» должно быть строкой.

test_main.py файл, который запускается на pytest.

Locators_test - это класс файла test_Locators.py, где у меня есть все мои xpaths

test_Locators.py

class Locators_test():

loginlink_xpath = "//a[@id='login-link']"
login_email = "xxxxx"
login_password = "xxxxx"
loginemail_id = "dnn_ctr1179_Login_txtEmail"
loginpassword_id = "dnn_ctr1179_Login_txtPassword"
clicklogin_id = "dnn_ctr1179_Login_btnLogin"

test_login.py

from Smoketest.locatorfile.test_Locators import Locators_test

class Login():

def __init__(self,driver):

    self.driver = driver

def login_user(self,driver):
    try:
        loginButton = self.driver.find_element((By.XPATH, Locators_test.loginlink_xpath))
        while loginButton.click() is True:
            break
        time.sleep(3)
        self.driver.execute_script("window.scrollBy(0,300);")

        EmailField = self.driver.find_element((By.ID, Locators_test.loginemail_id))
        EmailField.send_keys(Locators_test.login_email)

        PasswordField = self.driver.find_element((By.ID, Locators_test.loginpassword_id))
        PasswordField.send_keys(Locators_test.login_password)

        ClickLogin = self.driver.find_element((By.ID, Locators_test.clicklogin_id))
        while ClickLogin.click() is True:
            break

        time.sleep(5)

        userName = self.driver.find_element((By.XPATH, Locators_test.username_xpath))
        print("Logged in as", userName.text)



    except StaleElementReferenceException or ElementClickInterceptedException or TimeoutException as ex:
        print(ex.message)

test_main.py

    def test_setup():
        driver = webdriver.Chrome(executable_path= Locators_test.browser_path)
        driver.maximize_window()
        driver.delete_all_cookies()
        driver.get(homePage)
        driver.implicitly_wait(5)
        yield
        print("test complete")


def test_login(test_setup):

    from Smoketest.pages.test_login import Login

    lo = Login(driver)
lo.login_user(((Locators_test.loginlink_xpath,Locators_test.loginemail_id,Locators_test.login_email,Locators_test.loginpassword_id,Locators_test.login_password,Locators_test.clicklogin_id,Locators_test.username_xpath)))

все отступы в порядке

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Это сработало для меня,

locator = (By.XPATH, Locators_test.loginlink_xpath)
self.driver.find_element(*locator).click()

Объяснение: В *<arguments> все позиционные аргументы, кроме первого, будут упакованы в кортеж, так как они не будут Измениться, точное свойство будет отражено на втором шаге.

0 голосов
/ 27 февраля 2020

Я сам исправил это, убрав лишнюю пару скобок из строки

loginButton = self.driver.find_element((By.XPATH, Locators_test.loginlink_xpath))

Правильный путь -

loginButton = self.driver.find_element(By.XPATH, Locators_test.loginlink_xpath)

PS: это относится ко всем линиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...