2016-04-20 16 views
0

2つの異なるページで同じテストでmove_to_elementを実行しようとしています(破損することなく)StaleElementExceptionがスローされています。 テストは基本的に電子商取引のウェブサイトです。カートに追加するオプションを得るためには、商品の上にマウスを置かなければなりません。ホームページでは、商品のカテゴリに移動するためにメニューを表示する必要があります。1つのテストで1ページだけマウスオーバーを行うことができます

私は以下の関数を使用しています(これは私が使用しているものです)。ポップアップがある状況を処理して終了し、再度試行します。

@staticmethod 
def hover_over(some_element): 
    try: 
     action.move_to_element(wait.until(EC.visibility_of_element_located((some_element)))).perform() 
    except WebDriverException: 
     try: 
      pop = browser.find_element(*popup_exit_class) 
      pop.click() 
      wait.until(EC.visibility_of_element_located((some_element))) 
      action.move_to_element(wait.until(EC.visibility_of_element_located((some_element)))).perform() 

私も機能せずに試してみました:

x = browser.find_element(*some_element) 
    action.move_to_element(x).perform() 
    sleep(0.5) 
    browser.find_element(*some_other_element).click() 

を、それは私がウェブ要素が装着されているのUbuntu 14.04

答えて

0

にChromedriverを(それはまたFirefoxの上で起こる)使用している任意のヘルプならページに。ページがリロードされると、要素が削除され、新しい要素が作成されます。このため、あなたはStaleElementException例外を取得しています。さらに、各コールごとにActionChainsをインスタンス化する必要があります。

some_element = (By.ID, "...") 

element = wait.until(EC.visibility_of_element_located(some_element)) 
ActionChains(driver).move_to_element(element).perform() 

browser.find_element(*popup_exit_class).click() 

element = wait.until(EC.visibility_of_element_located(some_element)) 
ActionChains(driver).move_to_element(element).perform() 
+0

お返事ありがとうございます。私はロケータを使用しています。私は関数に渡すすべての要素が(By.method、 "selector_or_whatever")の形式で存在するlocators.pyファイルを持っています。例:func.hover_over(header.mini_cart)ここで、header.mini_cartはmini_cart =(By.ID、 "cartHeader") –

+0

私は気づいていませんが、実行するたびに 'ActionChains'をインスタンス化する必要もあります'。 –

関連する問題