2013-07-08 21 views
38

inputはフォーム(ボタンのように見え、ボタンのようにやり取りする)でデータを生成します(サーバーはフォームパラメータに基づいてデータを生成しますが、ユーザーのために、ボタンはそれを行います:))フォームのパラメーターに基づいて。Selenium Webdriver submit()vs click()

click()を使用すると、プロセス全体がハングアップします(実際にはフリーズし、例外もエラーもありません)。

セレンのウェブサイトから:

// Now submit the form. WebDriver will find the form for us from the element 
element.submit(); 

だから、webdriverをはsubmit()方法があります。ボタン上にclick()を使用するか、submit()を使用するかの間に、論理的な違いがありますか?

答えて

41

submit()機能は、人生を楽にする機能です。フォームタグの中の任意の要素でそれを使用して、そのフォームを送信することができます。

また、送信ボタンを検索してclick()を使用することもできます。

唯一の違いは、送信ボタンでclick()を実行する必要があり、いずれのフォーム要素でもsubmit()を実行できることです。

これはあなた次第です。

http://docs.seleniumhq.org/docs/03_webdriver.jsp#user-input-filling-in-forms

+0

ああ、実行の違いはありません。私はそれほど分かりませんでした。フリーズは、別のソース/ IEの不具合から発生する必要があります...本当にIE +セレンが嫌いです。答えてくれてありがとう。 – CosminO

+4

これは技術的には真実ではありません。違いは、submit型のinput要素でclickイベントを発生させ、もう一方はform要素でsubmitイベントを発生させることです。入力のクリックイベントでのみ発生するコードがある場合は、送信機能を使用すると発生しません。 –

+0

少なくとも1つの重要な違いがあります。少なくとも、chromeriverを使用している.netバージョンの場合、送信はページが読み込まれるまで待機します。クリックは保証されません。 –

22

クリックの違いは(あり)と()を提出します。

submit()フォームを送信し、action属性で指定されたURLを実行します。たとえば、フォームを送信するためにjavascript-functionまたはjquery-pluginが実行されている場合。 ajax経由で、submit()はそれを無視します。 click()を使用すると、javascript-functionsが実行されます。クリックはすぐに私はもうsubmit()の大ファンだったではなく、コード

+1

です。現代のUIのほとんどは、jQueryの広範な使用のためにほぼすべてのボタンをクリックしながら、javascript関数を起動します。 webdriver.submit()は "form2url"関数のようなものです。これは、フォームの外側を含む他の要素を使用して起動できる理由です。なぜなら、Web要素とは何の関係もないからです。最初のフォームインスタンスから値を取得するだけです。あなたが最初のフォームではないフォームを起動する場合は、最初にフォーム要素を取得するか、他のフォーム要素を削除する必要があります。 – erm3nda

6

、私は間違っているんだけど、私はそれが提出信じるなら、私を修正するには、ロードするために新しいページを待ちます。

私がテストしたウェブページでは、ユーザ名とパスワードを入力してログインをクリックします。 usernametextbox.submit()を呼び出すと、パスワードのテキストボックスはクリアされ(空になります)、ログインは失敗し続けます。

いつか私の頭を壊した後、usernametextbox.submit()を交換してloginbutton.click()に置き換えたとき、それは魔法のように働いた。

+2

今日、私は、クリックが、ページが読み込まれるのをもう待たず、クリックが正しく機能していると確信しているので、クリックコールをサブミットと置き換えなければならなかった。最近変更されたものでなければなりませんが、私はそれを証明できません。物事が働いているとセレンといつも同じように、それは彼らが正しく行われていることを意味しません。 –

7

の実行を継続する一方でまた

+0

が確認されました。送信ボタンで 'submit()'の問題がありましたが、ボタンのvalue属性は反映されませんでした。ボタンの上にある 'click()'を使って、魅力的なように働きました。 – Manfred

+0

ありがとう、ありがとう、ありがとう。なぜ送信がうまくいかないのか分かりません。 – ndhar

+0

ここで同じ問題があります。私のコードは複雑になりました。なぜなら、ロードするページを待たなければならないからです。 – neves

1

どちらもsubmit()でもclick()でもありません。

search_form = driver.find_element_by_id(elem_id) 
search_form.send_keys(search_string) 
search_form.click() 
from selenium.webdriver.common.keys import Keys 
search_form.send_keys(Keys.ENTER) 

は、Mac 10.11、パイソン2.7.9、セレン2.53.5でテスト:あなたはENTERキーでそれに従っている場合しかし、それが正常に動作します。これは並行して実行されます。つまり、Enterキーを入力した後に戻ると、ページが読み込まれるまで待機しません。

1

submit()メソッドは、フォームにあるボタンをクリックするために使用することができ、タイプ属性は「送信」する必要があります。

click()ウェブページのボタンをクリックする方法です。

私が間違っている場合は私を修正してください。

関連する問題