想象一下,有一个按钮可以打开一个JavaScript提示框,向用户显示数据并允许他们轻松复制。
<!DOCTYPE html>
<html>
<body>
<button id="show-coordinates" onclick="prompt('This is your coordinates', '4.684032, -74.109663');">
Show Coordinates
</button>
</body>
</html>
&#13;
使用Selenium WebDriver自动化按钮时,如何获取此类提示框的值(即本例中的坐标需要这些值以供进一步使用)? WebDriver API提供了一种方法来获取此类提示框的文本(在此示例中,它是This is your coordinates
),但不是我所能看到的值。
也可以考虑原生JavaScript解决方案(当然不会访问onclick
元素的<button>
属性。我将事件处理程序放在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"?
答案 0 :(得分:1)
仅限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()