私は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
を追加しようとしましたが、問題を修正しませんでした。
ありがとう、それは働いたが、私はなぜ理解できないのですか? Selenium WebDriverがSeleniumなしで正しく動作する場合、フォームコードに問題があるのはなぜですか? – Lastwall
@Lastwall根本的な原因がいくつかあります。テキストボックスには、onkey up/downやtext changeなどのカスタムハンドラがあります。 – Buaban