Selenium在有警报的页面上没有响应

时间:2017-06-01 14:41:47

标签: python selenium selenium-webdriver selenium-chromedriver

我有一个针对哪个Chrome驱动程序没有响应的最小示例。

alert.html:



<html>
        <body>
            <a href="test_alert.html" target="_blank" id="test">Visit Alert test!</a>
        </body>
</html>
&#13;
&#13;
&#13;

test_alert.html:

&#13;
&#13;
<html>
    <script type="text/javascript">
        alert("Hello world");
    </script>
</html>
&#13;
&#13;
&#13;

我写了一个基于Python的Selenium脚本来点击链接,然后尝试接受警报。但是,点击链接后,Chrome驱动程序没有响应。

这是产生此问题的Python脚本:

from selenium import webdriver
import time

SHORT_PAUSE = 5
capabilities = {
  'chromeOptions': {
    'androidPackage': 'org.chromium.chrome',
  }
}
driver = webdriver.Remote('http://localhost:9515', capabilities)
url = "http://10.0.0.173:8888/alert.html"
driver.get(url)
time.sleep(SHORT_PAUSE)


element = driver.find_element_by_id("test")
element.click()
print "done clicking"

# Usually prints: "[u'CDwindow-0', u'CDwindow-1']" 
print driver.window_handles
time.sleep(SHORT_PAUSE)
driver.switch_to.window(driver.window_handles[1])

# Selenium is unresponsive after this and 
# never prints the below line
print "current url:", driver.current_url
alert = driver.switch_to.alert
print "switched to alert. Text:", alert.text
alert.accept()
print "Accepted modal dialog...."

版本信息:

  • Python:2.7.6
  • Selenium:3.4.2
  • Chrome驱动程序:2.29
  • Chrome版本:58.0.3029.83(在通过USB连接的Android 7.1.1上)
  • 主机:Ubuntu 14.04.5 LTS

1 个答案:

答案 0 :(得分:0)

事实证明这是一个现有的Chromedriver错误:

https://bugs.chromium.org/p/chromedriver/issues/detail?id=833

在问题得到解决之前,我的工作是使用adb shell命令发送键盘输入,以便在我预计会弹出警报窗口时处理警报。

adb shell input keyevent 61 #Tab key for focus
adb shell input keyevent 66 #Enter key to deal with the alert

在解除警报后,chromedriver似乎再次正常工作。

注意:如果您使用的是Linux系统,则可以使用xdotool代替。