2017-01-18 28 views
4

ユーザーにデータを表示して簡単にコピーできるようにするJavaScriptプロンプトボックスを開くボタンがあるとします。Selenium WebDriverでJavaScriptプロンプトボックスの値を取得

<!DOCTYPE html> 
 
<html> 
 

 
<body> 
 
    <button id="show-coordinates" onclick="prompt('This is your coordinates', '4.684032, -74.109663');"> 
 
    Show Coordinates 
 
    </button> 
 
</body> 
 

 
</html>

セレンwebdriverをを使用してボタンを自動化する場合、どのようなプロンプトボックスの値を取得する(すなわち、この場合、さらなる使用のためにこれらの値を必要とする座標)? WebDriver APIは、このようなプロンプトボックスのテキストを取得するメソッドを提供します(この例では、それはThis is your coordinatesです)。

ネイティブJavaScriptの解決策も考えられます(属性の<button>要素にはアクセスできません)。問題を簡単に説明するために、DOMにイベントハンドラを配置します。 Windowsの場合

driver.find_element(:id, 'show-coordinates').click 
popup = driver.switch_to.alert 
puts popup.text # This is your coordinates 
# But how to get "4.684032, -74.109663"? 
+0

私も気にしないだろう。だから私はPython AutoHotKey + win32clipboardを使用...異なる動作をするように見える

を私はCTRL+C組み合わせを送信するために、共通のselenium方法を試してみましたが、それはfind_element().send_keys()switch_to_alert.send_keys()として働いていません。私は 'onclick'属性へのアクセスを禁止する理由がわかりません。適切な引数が 'prompt'に渡されていることを確認してください。そうしないと、ネイティブブラウザの 'prompt'メソッドが動作するかどうかをテストするだけです。私はあなたに確信しています、ブラウザのベンダーは自分自身をテストしています:)。 –

+0

@MikeMcCaughan:上記のコードは、問題を説明するための単なる例です。ボタンの 'onclick'イベントハンドラはDOMにないかもしれません。アイデアは、それらがそこにあるかどうかをテストするのではなく、今後の使用のための座標を取得することです、したがってブラウザがどのように動作するかは残念なことに無関係です。 :(セレンはブラウザを自動化しますが、テスト目的だけではありません。)他の提案はありますか? –

答えて

1

のみ

あなたが選択されている入力フィールドに必要な値を開いたときに、プロンプト見ることができるように(強調表示)。それらをコピーして、それらの値をクリップボードから使用することができます。

import win32clipboard 
import time 
import ahk 
from selenium import webdriver 

# Steps to open Prompt 
driver = webdriver.Chrome() 
driver.get(URL) 
driver.find_element_by_tag_name("button").click() 
driver.switch_to_alert() 

# Copy prompt content 
ahk.start() 
ahk.ready() 
ahk.execute("Send,^C") # sending CTRL + C 
time.sleep(2) # Required... for some reason 

driver.switch_to.alert.accept() 

# Get values from clipboard 
win32clipboard.OpenClipboard() 
data = win32clipboard.GetClipboardData() 
win32clipboard.CloseClipboard() 

print(data) # Output is "4.684032, -74.109663" 

driver.quit() 
+0

OS /ブラウザレベルのアクションのサードパーティツールを使用していただきありがとうございます。 –

関連する問題