2013-04-30 19 views
5

webdriverをC#のセレンを使用してOnKeyPressイベントを持っているテキストボックスにテキストを送信中に問題を持ちます。ここでは、テキストボックスを埋めるためにセレンのwebdriverを使用しています。テキストボックスを埋める前に、私はtextbox.clear()を使っています。 onkeypressイベントが呼び出され、ページがレンダリングされます。テキストボックスコントロールはwebdriverインスタンスから削除されます。私は値をテキストボックスに入力されたときにページがレンダリングを実行OnKeyPressイベントを持っているテキストボックスを持っています

行わOnKeyPressイベントの後、要素はwebdriverをに記載されて取得されていません。 これは、特定のテキストボックスのソースタグである:

<input id="ctl00_ctl00_ContentPlaceHolder1_cphMainContent_wzrDREvent_txtNftnTime" class="OpCenter_DateBox" type="text" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ctl00$ContentPlaceHolder1$cphMainContent$wzrDREvent$txtNftnTime\',\'\')', 0)" name="ctl00$ctl00$ContentPlaceHolder1$cphMainContent$wzrDREvent$txtNftnTime"> 

そして、あなたはここで使用OnKeyPressイベントを見ることができます。 テキストボックスに値を入力するためのアイデアを提案してください。

私は私のテキストボックスを埋めるために、次のコードを使用しています:事前に

element.Clear(); 
element.SendKeys(value); 

感謝を。

+0

(win32 oleを使用して)バックスペースで数回試してから、テキストを送信してみてください。私はあなたが本当にしゃがんでいるようだね! –

+0

私はあなたの質問に間違いがあったと思います。私はSelenium Webドライバを使用しており、自動化テストを行っています。私はテストが実行されている間バックスペースを打つことはできません。 – Naren

+0

あなたが投稿した入力ボックスに入力を送信するために現在使用しているセレンコードを入力してください。 – Nashibukasan

答えて

2

私はこの問題を克服するために、次のJavaScriptコードを使用しています。

if (!(webDriver.GetType().FullName).Contains("IE")) 
      { 
       // To stop the page postback in Firefox and chrome 
       ((IJavaScriptExecutor)webDriver).ExecuteScript("window.stop();"); 
      } 

上記のコードはページの読み込みを停止し、完全に動作します。

ただし、Firefox 23.0以降では、このJavaScriptが機能しません。それ以外の場合は、Chrome 31.0とIE 9ではJavaScriptが正常に動作します。

+0

アプリケーションの動作を変更するポストバックを停止しませんか? – Faiz

+0

@Faiz:アプリケーションの動作は、そのようにする必要があります。テストテキストボックスを変更している間、ポストバックイベントが発生するはずです。 – Naren

+0

正確には、 'window.stop()'を使用すると、アプリケーションは必要な処理をやめます。ポストバックは理由があります。たとえば、いくつかの検証を実行している可能性があります。あなたのテストに合うようにそれを止めるべきではありません。 – Faiz

5

あなたはおそらく、あなたがclear()を実行するときに発生しているonchangeイベントを見ています。

解決策ではなく、別のコールに比べて、1つのアクションでテキストをクリアして設定することです。 Actionsクラスを使用してこれを行うことができます。以下のC#拡張メソッドは、その方法を示しています。

テキストフィールド要素からフォーカスを失った後のonchangeイベントが発生します。

public static class WebElementExtensions 
{ 
public void ClearAndSetText(this IWebElement element, string text) 
{ 
    Actions navigator = new Actions(driver); 
     navigator.Click(element) 
      .SendKeys(Keys.End) 
      .KeyDown(Keys.Shift) 
      .SendKeys(Keys.Home) 
      .KeyUp(Keys.Shift) 
      .SendKeys(Keys.Backspace) 
      .SendKeys(text) 
      .Perform(); 
} 
} 
0

JS注入は、すべての時間賢明な解決策ではないですが、私は特定のシナリオやページの特定のためのコードを書くことがあなたの維持期における多大な苦痛を与える、@ Faiz.Alsoで行くことにあなたをお勧めします。

関連する問題