Ich versuche PhantomJS mit Webdriver und ich habe Probleme mit der Handhabung von Javascript-Warnungen. Ich bemerke, dass der phantomjs Treiber sined_capabilities ein Feld hat 'handlesAlerts': False
Gibt es eine Möglichkeit, diesen Wert auf wahr zu setzen? Ich habe die offensichtliche Art und Weise versucht, aber das hat keine Wirkung:Selen Gewünschte Fähigkeiten - set handlesAlerts für PhantomJS Treiber
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,...}
Ich kann den Wert im Wörterbuch ändern drv.desired_capabilities['handlesAlerts'] = True
, aber wenn ich versuche, auf eine Warnung zu wechseln, bekomme ich eine Fehlermeldung.
$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"}'
Die Wiki-Seite ist irreführend. Die API ist tatsächlich so implementiert, dass Sie die gewünschten Funktionen übergeben und das Remote-Ende erstellt die Sitzung mit dem, was sie erstellen kann. Das Remote-End gibt die Funktionen zurück, die tatsächlich in der Sitzung verfügbar sind, und die Kommunikation erfolgt nur in eine Richtung (lokale Änderungen können die Remote-Sitzung nicht beeinträchtigen). In der ausstehenden [W3C WebDriver-Spezifikation] (http://www.w3.org/TR/webdriver/) gibt es eine 'requiredCapabilities'-Einstellung, die eine Ausnahme auslöst, wenn der Server die Fähigkeit nicht bereitstellen kann, aber nicht Soweit ich weiß, wurde es von jedem Fahrer implementiert. – JimEvans
Downvoter, ich sehe keinen Sinn darin, richtige Antworten zu verwerfen, selbst wenn Sie die Wahrheit nicht mögen –
@usmcs Es tut mir leid, dass mein Versuch, Humor in die Quere gekommen ist und wie "Snark" zu sein schien. Das war nicht die Absicht. Ich habe die Antwort umgeschrieben, um die Situation im Fahrer besser auszudrücken. Beachten Sie auch, dass die betreffende Wiki-Seite aktualisiert wurde, um diese Situation zu verdeutlichen. Andere Downvoter beschreibt diese Antwort, wie die Dinge sind. Nur weil es nicht das ist, was du hören willst, oder es nicht so ist, wie du es haben willst, macht die Antwort nicht weniger gültig oder korrekt. – JimEvans