Le sélénium Souhaité les Capacités de l'ensemble handlesAlerts pour PhantomJS pilote
Je suis en train d'essayer de sortir avec phantomJS webdriver et j'ai de la difficulté avec la gestion des alertes javascript. Je remarque que le phantomjs pilote desired_capabilities a un champ 'handlesAlerts': False
Est-il un moyen de régler cette valeur à true? J'ai essayé le moyen le plus évident, mais qui n'a aucun effet:
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,...}
Je peux changer la valeur dans le dictionnaire drv.desired_capabilities['handlesAlerts'] = True
, mais quand j'essaie de passer à une alerte, je reçois un message d'erreur.
$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"}'
OriginalL'auteur munk | 2013-04-15
Vous devez vous connecter pour publier un commentaire.
L'API précise que les compétences requises être passé dans le constructeur. Cependant, il se peut qu'un pilote ne prend pas en charge une fonctionnalité demandée dans les compétences requises. Dans ce cas, aucune erreur n'est générée par le pilote, et c'est intentionnel. Les capacités de l'objet renvoyé par la session, qui indique les capacités de la session prend en charge.
C'est ce qui se passe vraiment dans ce cas. Le PhantomJS pilote ne prend pas en charge le traitement des alertes comme on le voit dans le code source, les capacités de l'objet indique autant. Dans la plupart des liaisons de langage, cette retourné les capacités de l'objet est en lecture seule; dans les liaisons de langage où le retour de l'objet peut être en lecture-écriture, la modification de ces capacités n'a pas d'effet réel sur la session. Dans l'attente de l' W3C WebDriver spécification, il y a un
requiredCapabilities
paramètre qui permettrait de lever une exception si le serveur ne peut pas fournir la capacité, mais qui n'a pas été mis en œuvre par un pilote, mais pour autant que je suis au courant.requiredCapabilities
paramètre qui permettrait de lever une exception si le serveur ne peut pas fournir la capacité, mais qui n'a pas été mis en œuvre par un pilote, mais pour autant que je suis au courant.Downvoter, je ne vois pas un point dans downvoting réponses correctes même si vous n'aimez pas la vérité
Je suis désolé, ma tentative d'humour a obtenu de la manière et semblait être "snark". Ce n'était pas l'intention. J'ai réécrit la réponse pour mieux exprimer la situation dans le pilote. Notez également que la page wiki en question a été mis à jour pour être plus clair concernant cette situation. D'autres downvoters, cette réponse décrit la façon dont les choses sont. Tout simplement parce que ce n'est pas ce que vous voulez entendre, ou ce n'est pas la façon dont vous voulez qu'il soit ne fait pas la réponse tout de moins en moins valide ou corriger.
OriginalL'auteur JimEvans