2016-04-13 8 views
1

私はPythonで少し新鮮です(通常はC#の処理を行います)。 同じクラスで定義された別の関数を使用しようとしています。それにアクセスすることはできません。同じクラス(Python)内の別の関数にアクセスする際に問題が発生する

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で理解していない超些細な何か..です助けを 感謝を!

+6

あなたの例ではインデントをする必要があります固定する。 –

+0

どういう意味ですか?私はIDEに関して識別子に関して何のエラーも見ません –

+0

Pythonはインデントに依存しています。関数は、クラスの一部としてインデントされる必要があります。また、クラス内のすべての関数は、最初のパラメータとして 'self'を必要とします。クラス内の別の関数を呼び出すには、まず 'self.'を実行します。 – minboost

答えて

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() 
+0

申し訳ありませんが、これは私が必要なものです!とても感謝しています! –

1

あなたのコードではPython2.X

を使用している場合、すべてのものは、それらが定義されているまで、それゆえ、それは方法を見つけることができない、クラスを好きではない逐次解釈されます。あなたはここにいくつかのミスを持っている:メソッドの

  1. インデントが間違っている、クラスはレベル0になり、 方法は、レベル1(1タブ)を持つことになります。..
  2. クラスメソッドは、最初のパラメータとしてキーワードselfを持つべきです。あなたはクラスメソッドがself.method_name()

使用呼び出すと、クラスのフィールドについて は、コードが

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() 
+0

これで私の主な機能としてrunSeleniumを実行したいのですが、どうすればいいですか? runSelenium.selenium()は動作していないようで、別のパラメータを要求します。それに "自己"を渡そうとしましたが、それは何らかの主要な関数/領域に入るでしょう。 –

+0

okそれでは、まず型 'runSelenium'のオブジェクトが必要で、次に 'selenium()' ... ' runSelenium() '、' a.selenium() ' –

+0

編集したコードをチェック@Pavel –

0

インデントあなたの機能である必要があり

  • self.field_nameを使用しています。今のところ、彼らはあなたのクラスの一部ではありません。

    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の構文エラーを取得されていません。しかし、クラスの一員になるためには、クラスの下でインデントされなければなりません。ここで

  • 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() 
    
    +0

    助けてくれてありがとう!私が__init__関数でwebdriverを宣言すると、クラス内の他の関数で私がまだアクセスできることをどうやって確認できますか? –

    +1

    これはクラス属性なので、次のようにアクセスできます: 'self.driver' – Quinn

    +0

    Ha!もちろん!ありがとう! –

    関連する問題