我試圖用webdriver phantomJS,我在處理JavaScript警報時遇到了麻煩。我注意到phantomjs驅動程序desired_capabilities有一個字段'handlesAlerts': False
有沒有辦法將這個值設置爲true?我已經嘗試了明顯的方法,但不具有任何影響:Selenium所需功能 - 爲PhantomJS驅動程序設置handlesAlerts
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"}'
維基頁面誤導您。 API實際上是爲了傳遞所需的功能而實現的,而遠程端使用它能夠創建的內容創建會話。遠程端返回會話中實際可用的功能,並且該通信是單向的(本地編輯不會影響遠程會話)。在待定的[W3C WebDriver規範](http://www.w3.org/TR/webdriver/)中,有一個'requiredCapabilities'設置,如果服務器無法提供該功能,則會引發異常,據我所知,任何驅動程序都已實施。 – JimEvans
Downvoter,即使你不喜歡真相,我也沒有看到正確答案的一個觀點 –
@usmcs我很抱歉,我對幽默的嘗試阻礙了我,並且看起來像「snark」。這不是意圖。爲了更好地表達駕駛員的情況,我重寫了答案。還請注意,有關這個維基頁面已更新爲更清楚。其他downvoters,這個答案描述事情的方式。僅僅因爲它不是你想要聽到的,或者它不是你想要的那樣,並不能使答案更加有效或者正確。 – JimEvans