2016-04-18 9 views
1

私はASP.NetアプリケーションをテストするためにSelenium.Netを使用しています。Selenium WebDriver JavaScriptを使用してself.locationを変更すると、クエリ文字列が送信されない

JavaScriptを呼び出すページにボタンASP.Netボタンがあります。このJavaScriptはself.locationを変更し、クエリ文字列を追加します。

Seleniumでテストすると、テスト文字列が存在しないため、テストが失敗します(リダイレクト先のページによってクエリ文字列が読み込まれます)。しかし、ページの場所は正しく更新されます。これを手動で行うと、クエリ文字列が正しく追加されます。ここで

はボタンであり、それはJavaScriptのだ:

<asp:Button ID="btnDoSearch" runat="server" CausesValidation="false" OnClientClick="QuickSearch();return false;" /> 

<script type="text/javascript"> 
    function QuickSearch() { 
     var txtValueToSearch = $find("<%= QuickSearchTextbox.ClientID %>");       
     self.location = "http://baseurl.com/Pages/QuickSearch.aspx?s=" + encodeURIComponent(txtValueToSearch.get_value()); 
    } 
</script> 

は、クイックサーチ機能でアラートを追加し、正しい値を返します。ここで

は、テストの関連する部分である:

driver.FindElement(By.Id("txtValueToSearch")).SendKeys("test"); 
driver.FindElement(By.Id("btnDoSearch")).Click();   
wait.Until(ExpectedConditions.ElementExists(QuickSearchPage.SearchResults)); 

テストを実行すると、単語「テスト」が正しく検索テキストボックスに送信されます。ボタンが正しく押されました。 QuickSearch.aspxページのページが読み込まれます。しかし、?s=クエリ文字列なし。

driverの代わりにActionsを使用してみましたが、明示的な待機とThread.sleepを追加しようとしましたが、問題を修正しませんでした。

答えて

1

プロパティ 'value'からテキストを取得できます。以下のコードを参照してください:

function QuickSearch() { 
     var txtValueToSearch = document.getElementById('txtValueToSearch');       
     self.location = "http://baseurl.com/Pages/QuickSearch.aspx?s=" + encodeURIComponent(txtValueToSearch.value); 
} 
+0

ありがとう、それは働いたが、私はなぜ理解できないのですか? Selenium WebDriverがSeleniumなしで正しく動作する場合、フォームコードに問題があるのはなぜですか? – Lastwall

+0

@Lastwall根本的な原因がいくつかあります。テキストボックスには、onkey up/downやtext changeなどのカスタムハンドラがあります。 – Buaban

関連する問題