2016-06-01 3 views
1

私のpython /セレンスクリプトを実行しているとき、私は次のエラーを取得しています:ActionChains move_to_element()を呼び出すと、属性エラーが発生しますか?

はAttributeError:「WebElement」オブジェクトは、この特定のエラーメッセージは何を教えてくれない無属性「move_to_element」

を持っていませんか?有効なアクションとしてmove_to_elementを認識していませんか?私は(クリックを使用することができるよ

from selenium.webdriver.common.action_chains import ActionChains 

)と問題なくsend_keys()アクション:私は、次のようなactionchainsモジュールをインポートしています。

def wait_for_element_visibility(self, waitTime, locatorMode, Locator): 
    element = None 
    if locatorMode == LocatorMode.ID: 
      element = WebDriverWait(self.driver, waitTime).\ 
        until(EC.visibility_of_element_located((By.ID, Locator))) 
    elif locatorMode == LocatorMode.NAME: 
      element = WebDriverWait(self.driver, waitTime).\ 
        until(EC.visibility_of_element_located((By.NAME, Locator))) 
    elif locatorMode == LocatorMode.XPATH: 
      element = WebDriverWait(self.driver, waitTime).\ 
        until(EC.visibility_of_element_located((By.XPATH, Locator))) 
    elif locatorMode == LocatorMode.CSS_SELECTOR: 
      element = WebDriverWait(self.driver, waitTime).\ 
        until(EC.visibility_of_element_located((By.CSS_SELECTOR, Locator))) 
    else: 
     raise Exception("Unsupported locator strategy.") 
    return element 

def find_element(self, locatorMode, Locator): 
    element = None 
    if locatorMode == LocatorMode.ID: 
     element = self.driver.find_element_by_id(Locator) 
    elif locatorMode == LocatorMode.NAME: 
     element = self.driver.find_element_by_name(Locator) 
    elif locatorMode == LocatorMode.XPATH: 
     element = self.driver.find_element_by_xpath(Locator) 
    elif locatorMode == LocatorMode.CSS_SELECTOR: 
     element = self.driver.find_element_by_css_selector(Locator) 
    else: 
     raise Exception("Unsupported locator strategy.") 
    return element 

def fill_out_field(self, locatorMode, Locator, text): 
    self.find_element(locatorMode, Locator).clear() 
    self.find_element(locatorMode, Locator).send_keys(text) 

def click(self, waitTime, locatorMode, Locator): 
    self.wait_until_element_clickable(waitTime, locatorMode, Locator).click() 

def hover_over(self, waitTime, locatorMode, Locator): 
    element = Locator 
    self.wait_for_element_visibility(waitTime, locatorMode, Locator).move_to_element(element).perform() 

私はこのようにそれを呼び出すようにしようとしている:それから、要素の可視性のための

self.wait_for_element_visibility(waitTime, locatorMode, Locator).move_to_element(element).perform()

ここwait_for_element_visibility()待ちと要素自体を返します。ここでは

self.hover_over(10, 
         "id", 
         WelcomePageMap['ShareButtonId'] 
     ) 
+1

完全なコードを表示してください。なぜ私たちが必要とする唯一の情報しか輸入していないと思いますか? –

+1

エラーが発生した場所で正確なコードを共有してください。 – nullpointer

答えて

2

は、問題のあるラインでありますWebElementオブジェクトでmove_to_element()を呼び出していますが、その代わりに、以前に見つかった要素を次のように渡してActionChainsインスタンスで呼び出す必要があります。引数:

from selenium.webdriver.common.action_chains import ActionChains 

element = self.wait_for_element_visibility(waitTime, locatorMode, Locator) 

actions = ActionChains(self.driver) 
actions.move_to_element(element) 
actions.perform() 
+0

OKありがとうございます。私はメソッドでラップしようとしていますので、別のページオブジェクトでテストスクリプトを呼び出すことができます。これはmove_to_element()では可能ではありませんか? – Vince

+0

@VinceLあなたが投稿したコードを反映するように更新されました。希望が役立ちます。 – alecxe

+0

ありがとう!それは今意味がある。私はあなたがそれのようなmove_to_element()を使用できないことを知りませんでした。 – Vince

0

このコードは失敗する場所です:Pythonでアクションを使用する

self.wait_for_element_visibility(waitTime, locatorMode, Locator).move_to_element(element).perform() 

サンプル・コードは、ここに行く:

element = self.driver.find_element_by_id(<id>) //use any of your locator strategy 
action = ActionChains(self.driver) 
action.move_to_element(element).perform() 
0

私はあなたがしようとしていると思います'move_to_element()'をWebElementオブジェクト拡張として呼び出すことはできません。 ActionChainをインポートしても、WebElementにはこの種の拡張機能はありません。

は、あなたはそれのような何かをする必要があります。

ActionChains(driver).move_to_element(element).perform() 

ドライバ - あなたのwebdriverを

要素 - 要素(WebElementオブジェクト)あなたが移動したいです。

関連する問題