Python 为什么通过采用3个位置参数的xpath()查找元素?

Python 为什么通过采用3个位置参数的xpath()查找元素?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,*args以元组形式解包定位器。但在我的例子中,我只给出了两个参数,但它包含三个参数。需要帮助才能理解 我是使用python开发selenium的新手,并在github中使用了一些代码, 但这是一个错误 TypeError:find\u element\u by\u xpath()接受2个位置参数,但给出了3个 locator.py from selenium.webdriver.common.by import By class elements(object): Customer

*args以元组形式解包定位器。但在我的例子中,我只给出了两个参数,但它包含三个参数。需要帮助才能理解

我是使用python开发selenium的新手,并在github中使用了一些代码, 但这是一个错误

TypeError:
find\u element\u by\u 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)
错误日志:

测试用户(main.TestPages)。。。错误 ====================================================================== 错误:测试用户(main.TestPages) ---------------------------------------------------------------------- 回溯(最近一次呼叫最后一次): test_tes_cust中第28行的文件“testPages.py” res_page=page.create_customer() 文件“C:\Users####\PycharmProjects\basics\pages.py”,第35行,在创建客户 self.find_元素,单击(*self.locator.Customer) 文件“C:\Users####\PycharmProjects\basics\base.py”,第21行,在find_元素中单击 self.driver.find\u元素\u by_xpath(*locator)。单击() 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)

你通过了一个额外的论点。你的论点是:

  • self
  • By.XPATH
  • “//按钮[包含(text(),'Customer')]”
  • 这就是您需要传递给
    find\u element
    方法的内容。而
    find\u element\u by\u xpath
    应该只接受两个参数:

  • self
  • “//按钮[包含(text(),'Customer')]”
  • 因此,请尝试将代码更新为

    def find_element_with_click(self,*locator):
        self.driver.find_element(*locator).click()
    
    或者您需要将
    客户
    修改为:

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