硒期望的能力 - 为PhantomJS驱动程序集handlesAlerts(Selenium Des

2019-08-31 06:33发布

我尝试用webdriver的phantomJS和我在与处理JavaScript警报麻烦。 我注意到phantomjs司机desired_capabilities有一个字段'handlesAlerts': False有没有一种方法来设置这个值是真的吗? 我已经尝试了明显的方法,但不具有任何影响:

drv = webdriver.PhantomJS(desired_capabilities={'handlesAlerts': True})

print drv.desired_capabilities

{u'browserName': u'phantomjs',
 u'driverName': u'ghostdriver',
 u'driverVersion': u'1.0.3',
 u'handlesAlerts': False,
 u'javascriptEnabled': True,...}

我可以在字典中更改数值drv.desired_capabilities['handlesAlerts'] = True ,但是当我尝试切换到一个警告,我得到一个错误信息。

$cat index.html 
<html>
<body>
<script type="text/javascript">
    alert('FOO!');
</script>
    Hello World.
</body>
</html>

>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> driver.desired_capabilities['handlesAlerts'] = True
>>> driver.get('index.html')
>>> alert = driver.switch_to_alert()
>>> alert.text

Traceback (most recent call last):
<snip>
selenium.common.exceptions.WebDriverException: Message: 
   'Invalid Command Method -  Request    => 
                 {"headers":{"Accept":"application/json",
                              "Accept- Encoding":"identity",
                              "Connection":"close",
                              "Content-Type":"application/json;charset=UTF- 8",
                              "Host":"127.0.0.1:56009", 
                              "User-Agent":"Python- urllib/2.7"},
                  "httpVersion":"1.1",
                  "method":"GET",
                  "url":"/alert_text",
                  "urlParsed": {"anchor":"",
                                "query":"",
                                "file":"alert_text",
                                "directory":"/",
                                "path":"/alert_text",
                                "relative":"/ alert_text",
                                "port":"",
                                "host":"",
                                "password":"",
                                "user":"",
                                "userInfo":"",
                                "authority":"",
                                "protocol ":"",
                                "source":"/alert_text",
                                "queryKey":{},
                                "chunks":["alert_text"]},
                                "urlOriginal":"/session/cd31ed90-a5f8-11e2-856d-5783db9f5342/alert_text"}' 

Answer 1:

该API指定所需的功能被传递到构造函数。 但是,它可能是一个驱动程序不支持所需的功能要求功能的情况。 在这种情况下,没有错误是由司机扔了,这是故意的。 一个功能,目的是通过这表明会话实际支持能力回来了。

这就是在这种情况下,实际发生的事情。 该PhantomJS驱动程序不支持处理警报在看到源代码 ,返回的功能对象指示之多。 在大多数语言绑定,这回是只读的功能对象; 在语言绑定在返回的对象可读写,修改这些功能对会议没有实际效果。 在悬而未决的W3C规范的webdriver ,有一个requiredCapabilities设置这将抛出一个异常,如果服务器不能提供的功能,但是这并没有被任何驱动程序尚未就我所知实现。



文章来源: Selenium Desired Capabilities - set handlesAlerts for PhantomJS driver