Почему find_element_by_xpath () принимает 3 позиционных аргумента? - PullRequest
0 голосов
/ 09 января 2019

* args распаковывает локаторы в форме кортежа. Но в моем случае я привел только два аргумента, но он принимает три аргумента. Нужна помощь, чтобы понять.

Я новичок в селене с python и поигрался с кодом из github, но получаю ошибку.

TypeError: find_element_by_xpath() принимает 2 позиционных аргумента, но 3 было дано

locator.py
from selenium.webdriver.common.by import By
class elements(object):
      Customer = (By.XPATH, "//button[contains(text(),'Customer')]")


base.py
from selenium import webdriver
from selenium.webdriver.common.by import By

class Page(object):
    def __init__(self,driver,url=None):
        self.url = url
        self.driver = driver

    def find_element_with_click(self,*locator):
        self.driver.find_element_by_xpath(*locator).click()


pages.py
from selenium import webdriver
from base import Page
from locator import *

class CustomerCreation(Page):
    def __init__(self, driver):
        self.locator = elements
        super().__init__(driver)

    def create_customer(self):
        self.driver.find_element_with_click(*self.locator.Customer)


testPages.py
import unittest
from selenium import webdriver
from pages import *
from locators import *
from selenium.webdriver.common.by import By

class TestPages(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome('C:\ChromeDriver\chromedriver')
        cls.driver.get("#server")


    def test_tes_cust(self):
        page = CustomerCreation(self.driver)
        res_page = page.create_customer()          #Getting issue at this stage

    @classmethod
    def tearDownClass(cls):
        cls.driver.close()


if __name__ == "__main__":
    suite = unittest.TestLoader().loadTestsFromTestCase(TestPages)
    unittest.TextTestRunner(verbosity=2).run(suite)

Журнал ошибок:

test_tes_cust ( main .TestPages) ... ОШИБКА ================================================== ==================== ОШИБКА: test_tes_cust ( main .TestPages) -------------------------------------------------- -------------------- Traceback (последний вызов был последним): Файл "testPages.py", строка 28, в test_tes_cust res_page = page.create_customer () Файл "C: \ Users ### \ PycharmProjects \ basics \ pages.py", строка 35, в create_customer self.find_element_with_click (* self.locator.Customer) Файл "C: \ Users ### \ PycharmProjects \ basics \ base.py", строка 21, в find_element_with_click self.driver.find_element_by_xpath (* локатор) .click () Ошибка типа: find_element_by_xpath () принимает 2 позиционных аргумента, но 3 было дано

1 Ответ

0 голосов
/ 09 января 2019

Вы передаете один дополнительный аргумент. Ваши аргументы:

  1. self
  2. By.XPATH
  3. "//button[contains(text(),'Customer')]"

Это то, что вам нужно передать методу find_element. В то время как find_element_by_xpath должен принимать только два аргумента:

  1. self
  2. "//button[contains(text(),'Customer')]"

Так что попробуйте обновить свой код как

def find_element_with_click(self,*locator):
    self.driver.find_element(*locator).click()

или вам нужно изменить Customer как:

Customer = "//button[contains(text(),'Customer')]"

и

def find_element_with_click(self, xpath):
    self.driver.find_element_by_xpath(xpath).click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...