簡體   English   中英

使用Selenium WebDriver獲取JavaScript提示框的值

[英]Get the value of a JavaScript prompt box with 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> 

使用Selenium WebDriver自動化按鈕時,如何獲取此類提示框的值(即本例中的坐標,需要這些值以供進一步使用)? WebDriver API提供了一種方法來獲取這樣的提示框的文本(在這個例子中,它This is your coordinates ),但不是我能看到的值。

原生JavaScript解決方案也可以考慮(當然不能訪問<button>元素的onclick屬性。我將事件處理程序放在DOM中只是為了簡單地說明問題)。

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"?

僅適用於Windows

正如您所看到的那樣,當打開提示時,選擇(突出顯示)輸入字段中的所需值。 您可以復制它們,然后使用剪貼板中的這些值。 我嘗試了常見的selenium方法來發送CTRL+C組合,但它不能用作find_element().send_keys()switch_to_alert.send_keys()似乎工作方式不同......

所以我使用了Python AutoHotKey + win32clipboard

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM