无法访问同一个类中的另一个函数(Python)

时间:2016-04-13 14:03:36

标签: python

我对Python有点新鲜(通常做C#的东西).. 我正在尝试使用在同一个类中定义的另一个函数,由于某种原因我无法访问它。

class runSelenium:

    def printTest():
        print('This works')

    def isElementPresent(locator):
        try:
            elem = driver.find_element_by_xpath(locator)
            bRes = True
        except AssertionError:
            print('whatever')
        else:
            return False

    def selenium():
        driver = webdriver.Firefox()
        driver.get("https://somesite.com/")
        printTest()
        isPresent = isElementPresent("//li[@class='someitem'][60]")

当尝试使用printTest()和isElementPresent()时,我得到:函数未定义.. 这可能是我在Python中无法理解的超级微不足道的东西.. 谢谢你的帮助!

4 个答案:

答案 0 :(得分:4)

以下是python中的一些示例,可以帮助您入门:

class RunSelenium(object):

    def printTest(self):
        print('printTest 1!')

    @staticmethod
    def printTest2():
        print('printTest 2!')


def printTest3():
    print('printTest 3!')


# Call a method from an instantiated class
RunSelenium().printTest()

# Call a static method
RunSelenium.printTest2()

# Call a simple function
printTest3()

答案 1 :(得分:1)

如果您使用的是Python2.X

在你的代码中,每个东西都被顺序解释而不是类,因此,它们无法找到方法,直到它们被定义。你有几个错误:

  1. 方法缩进不正确,类将在0级, 方法将有1级(1个标签)..
  2. 类方法应将关键字self作为第一个参数。 对于课程字段,请使用self.field_name
  3. 使用self.method_name()
  4. 调用类方法时

    代码应为

    class runSelenium:
    
        def printTest(self):
            print('This works')
    
        def isElementPresent(self,locator):
            try:
                elem = driver.find_element_by_xpath(locator)
                bRes = True
            except AssertionError:
                print('whatever')
            else:
                return False
    
        def selenium(self):
            driver = webdriver.Firefox()
            driver.get("https://somesite.com/")
            self.printTest()
            isPresent = self.isElementPresent("//li[@class='someitem'][60]")
    
     #Edit: To Run
     a=runSelenium()
     a.selenium()
    

答案 2 :(得分:1)

这是在同一个类中调用函数的另一种方法:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

class runSelenium:
    def __init__(self):
        # define a class attribute
        self.driver = None

    def printTest(self):
        print('This works')

    def isElementPresent(self, locator):
        try:
            elem = self.driver.find_element_by_xpath(locator)
            bRes = True
        except NoSuchElementException:
            print('whatever')
        else:
            return False

    def selenium(self):
        self.driver = webdriver.Firefox()
        self.driver.get("https://somesite.com/")
        self.printTest()
        isPresent = self.isElementPresent("//li[@class='someitem'][60]")

if __name__ == '__main__':
    # create an instance of class runSelenium
    run = runSelenium()
    # call function
    run.selenium()

答案 3 :(得分:0)

缩进你的功能。截至目前,他们不属于你的班级。

class runSelenium:

    def printTest():
        print('This works')

    def isElementPresent(locator):
        try:
            elem = driver.find_element_by_xpath(locator)
            bRes = True
        except AssertionError:
            print('whatever')
        else:
            return False

    def selenium():
        driver = webdriver.Firefox()
        driver.get("https://somesite.com/")
        printTest()
        isPresent = isElementPresent("//li[@class='someitem'][60]")

您没有收到任何IDE语法错误,因为这些函数不会 属于该类。但是他们必须在课堂下缩进才能成为班级的一部分。