首页 > 解决方案 > 调用类和函数时Python Selenium中xpath中的变量

问题描述

我有以下课程:

class Sections(BasePage):

    CHOOSE_SECTION_SEL = (By.XPATH, "//*[@class='select2-result-label' and (text() = '" + state + "')]")

    def choose_section(self, state):
        self.click_on_element("choose section", self.CHOOSE_SECTION_SEL)

然后我想这样称呼它,这样我就可以随心所欲地更改变量“状态”,但它显然不起作用:

section = Sections(driver=self.driver)
section.choose_section(state="CALENDAR")

我知道我可以这样做并且它正在工作:

class Sections:

    def section(self, state):
        driver.find_element_by_xpath("//*[@class='select2-result-label' and (text() = '" + state + "')]").click()

...

choose = Sections()
choose.section(state="CALENDAR")

但是我必须像第一个例子那样做。有什么想法我必须改变吗?

标签: pythonseleniumclassvariablesxpath

解决方案


您可以将表示法更改为以下任一形式:

  • 使用变量

    CHOOSE_SECTION_SEL = (By.XPATH, "//*[@class='select2-result-label' and text()='" + state + "']")
    
  • 使用%s

    CHOOSE_SECTION_SEL = (By.XPATH, "//*[@class='select2-result-label' and text()='%s']"% str(state))
    
  • 使用{}

    CHOOSE_SECTION_SEL = (By.XPATH, "//*[@class='select2-result-label' and text()='{}']".format(str(state)))
    

您可以像这样实现它:

class Sections(BasePage):

    def choose_section(self, state):
        self.CHOOSE_SECTION_SEL = (By.XPATH, "//*[@class='select2-result-label' and (text() = '" + state + "')]")
        self.click_on_element("choose section", self.CHOOSE_SECTION_SEL)

推荐阅读