31

リンクをクリックすると、別のポップアップウィンドウが表示されるWebアプリケーションに取り組んでいます。ポップ ウィンドウはアラートではなく、ユーザーが入力するさまざまなフィールドを含むフォームであり、[次へ] をクリックします。

セレンを使用してこのポップアップウィンドウを処理/自動化するにはどうすればよいですか?

概要 :-

  1. ハイパーリンク (url) をクリックします - 「ここをクリック」
  2. ユーザー登録フォームがポップアップとして表示されます
  3. データはユーザーによって入力されます
  4. [次へ/送信] ボタンをクリックします。
  5. 別のページ/フォーム「ユーザー個人情報ページ」にリダイレクトされる別の次のページ
  6. 個人情報は利用者が記入すること
  7. 「次へ/送信」をクリック
  8. ポップアップが消えました。
  9. 元の/ベースページでさらに処理します。
4

2 に答える 2

44

ポップアップへの切り替えは、少なくとも 2 つの別々の理由で困難です。

  1. 多くの人が知っているのはdriver.switch_to.window(window_handle)、ポップアップが表示されたときにポップアップウィンドウで要素を見つけることができるようにすることと、ポップアップが閉じられた後にメインウィンドウで要素を見つけることができるようにすることの両方を使用する必要があるということです。
  2. 遅いマシンを持っている人だけが遭遇する可能性が高いのは、Selenium がウィンドウ ハンドルを変数として使用できるようにするときに、最初は None に設定され、値が入力されるまでに少し時間がかかることです。

要求されたシーケンスを実行しながら、これらの問題に対処するコードを次に示します。ステートメントを省略し、import変数名を使用しているのは明らかであることを願っています。find_element(s)_by_xpathまた、コードで使用したいことに注意してください 。他のfind_element(s)_by方法を自由に使用してください。

main_window_handle = None
while not main_window_handle:
    main_window_handle = driver.current_window_handle
driver.find_element_by_xpath(u'//a[text()="click here"]').click()
signin_window_handle = None
while not signin_window_handle:
    for handle in driver.window_handles:
        if handle != main_window_handle:
            signin_window_handle = handle
            break
driver.switch_to.window(signin_window_handle)
driver.find_element_by_xpath(u'//input[@id="id_1"]').send_keys(user_text_1)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.find_element_by_xpath(u'//input[@id="id_2"]').send_keys(user_text_2)
driver.find_element_by_xpath(u'//input[@value="OK"]').click()
driver.switch_to.window(main_window_handle) #or driver.switch_to_default_content()

より明確にするために、誰か (おそらく私) が例にさらに追加する必要がある場合、または他の情報を提供する必要がある場合はお知らせください。

于 2015-03-14T18:25:48.607 に答える
8

newwindowまたは の場合は、またはiframeを使用する必要があります。これにより、ポップアップ内で操作できるようになります。終了したら、メイン Web ページに戻る必要があります。driver.switch_to_frame(webelement)driver.switch_to_window(window_name)elementsdriver.switch_to_default_content()

于 2013-07-16T12:13:55.060 に答える