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

4

想象一下,有一个按钮可以打开一个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"?

我甚至不会费心。我不确定为什么您禁止访问 onclick 属性。请检查传递给 prompt 的参数是否正确。否则,您只是在测试本机浏览器的 prompt 方法是否有效。我向您保证,浏览器供应商已经为此进行了测试:) - Heretic Monkey
@MikeMcCaughan:上面的代码只是一个简单的示例,用于说明问题。按钮的 onclick 事件处理程序可能不在 DOM 中。想法是获取坐标以供进一步使用,而不是测试它们是否存在,因此浏览器的工作方式似乎是无关紧要的。 :( Selenium 自动化浏览器,不仅仅是为了测试目的。还有其他建议吗? - Yi Zeng
有什么办法可以捕获用户输入返回的值吗? - oldboy
1个回答

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

谢谢,使用第三方工具进行操作系统/浏览器级别的操作可能是一个解决方案。已点赞。 - Yi Zeng
有什么办法可以捕获用户输入返回的值吗? - oldboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接