2012-01-12 8 views
0

私はStale参照例外(要素はもはや 有効ではありません)を取得していますが、自動化のためにC# - Webdriverを使用しています。EventFiringWebDriverリスナーの古くなっている参照例外

私は自動化フレームワークのためにSeleniumを使用しています。その中で私は Selenium EventのEventFiringWebDriverクラスを使用しました。これは、InterenetExplorerWebdriverのすべての イベントをリッスンします(Click()またはSendKeys()など)。 (ElementClicked、ElementValueChanged)のようなEventFiringWebDriverクラスのイベント が、Webベースのログ ファイルにWebElementEventArgsオブジェクトの属性を記録するというロジックを実装しました。したがって、実行の最後に、XSLT形式で各テストケースの実行の詳細を確認し、関数 のエラーを追跡できます。

コード: - 私はセレンを使用して自動化する私のアプリケーションで

public class SeleniumEventListener : EventFiringWebDriver 
{ 
    public SeleniumEventListener(IWebDriver webDriver):base(webDriver) 
    { 
      ElementClicked += new EventHandler<WebElementEventArgs>SeleniumEventListener_ElementClicked); 
//more events handled here.. 
} 
    void SeleniumEventListener_ElementValueChanged(object sender,WebElementEventArgs e) 
{ 
      LogPassedStep(e) 
    } 
    private LogPassedStep(e) 
    { 
      string title = e.Element.value; 
      string status = "clicked" 

     //XML based logging here. 
    } 

}

。私はいくつかのテキストを持っています ボックスとボタン、EventFiringWebDriverクラスXMLLoggingは、テストケースの実行を通じてテキストボックスのために正しく を動作させますが、ボタンやリンクには が有効です。 webdriverを、正しく作品をクリック)

いくつかのボタンは、DOMを変化させる崩壊を展開 タイプのものであり、そして私のアプリケーション では、私は 古い参照例外が頻繁に来ることで定期的に更新し、タスクのページを持っています実行中に EventFiringWebDriverがオブジェクトを認識できず、古くなった参照 例外は

...私を助けてくださいか、私に(ボタン、リンクなど) Webページオブジェクトの詳細は、私が(私はC#の-webdriverを使用しています) ロギング機能を実装することができるようにすることを取得する方法を提案してください来ます/

答えて

0

StaleElementReferenceExceptionは、存在しなくなった要素の属性にアクセスしていることを意味します。 DOMが変更される前に、要素に必要なすべての属性値を収集する必要があります。だから、あなたがしたい場合は

:ページ上の

  1. 検索要素が
  2. メイク要素が消える(例えば、別のページ開く)
  3. ログその要素の名前を

以下を行う必要があります。

  1. ページの要素を見つける
  2. 変数に要素の名前を格納する(my_elements_name
  3. make要素が消えます(例:別のページを開く)
  4. その要素の名前は、my_elements_name変数を使用してログに記録され、要素自体は記録されません。Pythonで

それは次のようになります。アプローチは、私は、実行時に扱うすべての要素のために不必要なcode.Becauseが増加します

from selenium.webdriver import Firefox 


browser = Firefox() 
browser.get('http://google.com') 

element = browser.find_element_by_id('lst-ib') 
element_name = element.get_attribute('name') 

browser.get('http://en.wikipedia.org') 

# this will raise 'StaleElementReferenceException': 
print element.get_attribute('name') 

# and this will work: 
print element_name 
# prints out: 'q' 
+0

を私は追加code.Inにイベントを追加する必要があります私はXMLロギングロジックを1回だけ書く必要がありました。 –

+0

EventDriverクラスを使用する私の目的は、詳細な実行レポートをXML形式で取得することです。他のオプションもあります。 –

関連する問題