2017-11-21 12 views
1

Pythonでカスタム待ち状態の関数を作成しようとしました。しかし、私はエラーを取得する:セレンからPythonでカスタム待ち状態を作成する

TypeError: 'bool' object is not callable

def waittest(driver, locator, attr, value): 
    element = driver.find_element_by_xpath(locator) 
    if element.get_attribute(attr) == value: 
     return element 
    else: 
     return False 
wait = WebDriverWait(driver, 10) 
element = wait.until(waittest(driver, '//div[@id="text"]', "myCSSClass", "false"))  
+0

を使用して完全なエラーを入力してくださいされています。エラーはどこで起こっていますか? –

+1

なぜ別のメソッドを呼び出すのですか? --http://selenium-python.readthedocs.io/waits.html: 要素= WebDriverWait(ドライバ、10).until( )(.ID、 "myDynamicElement")) – Ywapom

答えて

0

私が本当にし終わると、ラムダ self.wait.until(lambda x: waittest(driver, '//div[@id="text"]', "myCSSClass", "false"))

0

wait.until(..)機能は、それが呼び出すことができる機能を期待しています。しかし、あなたは事実上、それにブール値を与えます。これは、より明確にし、どの

value = waittest(driver, '//div[@id="text"]', "myCSSClass", "false") 
element = wait.until(value) 

- ブール値を返し、wait.until(..)は、機能としてそれを呼び出そうとしwaittest - それゆえ'bool' object is not callable

element = wait.until(waittest(driver, '//div[@id="text"]', "myCSSClass", "false")) 

はのように書き換えることができます。

あなたのカスタム条件に、セレンがまだ真であるかどうかを確認するために呼び出すことができる関数を返す必要があります。あなたの関数の中の関数を定義することによってこれを行うことができます。

def waittest(locator, attr, value): 
    def check_condition(driver): 
     element = driver.find_element_by_xpath(locator) 
     if element.get_attribute(attr) == value: 
      return element 
     else: 
      return False 
    return check_condition 
関連する問題