11
votes

Comment tenir la clé avec sélénium

J'utilise sélénium avec python et chrome. J'essaie de tenir diverses clés - spécifiquement "w, a, s et d." J'ai trouvé l'action action_chaines selenium.ky_press ainsi que la méthode Elem.Send_Keys. Le problème avec la première méthode est qu'il ne contient que la clé aussi longtemps que nécessaire pour effectuer une chaîne d'action. Le problème avec la méthode ELEM.SEND_KEYS est qu'il ne dispose pas d'un élément pour envoyer les clés à.

J'essaie de contrôler un robot basé sur le navigateur Web avec W-A-S-D, donc j'ai besoin de déposer des clés pour différentes durées.

J'ai essayé ce qui suit: xxx

ainsi que: xxx

non plus Idéal .


3 commentaires

Juste pour confirmer, vous dites que action_chains.key_down ("w") n'a pas fonctionné? Ou avez-vous besoin d'une méthode de levage de la clé après un certain temps s'est écoulé?


action_chains.key_down ("w") fonctionne, mais uniquement pour la fraction de seconde, il faut que mon ordinateur fasse cette action. De toute évidence, les concepteurs du paquet ont rendu le temps minimum possible. J'ai besoin d'un moyen de le retenir puis de la libérer après un certain temps.


Dupliqué possible de Python Simuler la clé


3 Réponses :


2
votes

La chaîne d'actions de sélénium ne doit être utilisée que avec des touches de modification (contrôle, alt et décalage). Donc, vous voulez appuyer sur le caractère W-A-S-D. Donc, cela n'a pas fonctionné.

Vous pouvez utiliser des outils d'automatisation de l'interface graphique tels que Pyutogui, etc. P>

Veuillez essayer ci-dessous le code et laissez-moi savoir. P>

import pyautogui

pyautogui.PAUSE = 10
pyautogui.keyDown('w')
pyautogui.keyUp('w')


3 commentaires

J'ai besoin d'une solution possible sur le sélénium. Pour vous assurer, cette action apparaît uniquement dans Web PageWindow. Mais pas dans d'autres endroits.


Cette action a lieu sur l'endroit où le curseur est. Avant ce code, vous pouvez rendre la fenêtre du navigateur active à l'aide de sélénium. Et l'opération de la chaîne d'action de sélénium nécessite une courrière devrait être la fenêtre supérieure. Sinon, les opérations de clés et de souris ne fonctionnent pas.


Je n'ai pas utilisé l'action de la chaîne d'action avant, mais d'autres actions, comme webdiver.send_keys () fonctionne sans problème, chaque fois que la fenêtre de chrome est cachée.



1
votes

Selon le Documentation de sélénium pour Key_down , il stipule:

ne doit être utilisé que avec des touches de modification (contrôle, alt et shift).

J'ai recherché dans les documents pour une solution alternative, mais il apparaît que le comportement de "maintenir" les touches non modifiantes n'est pas possible dans le sélénium.


5 commentaires

C'est comme un avertissement dans le sélénium. Calling` key_down `fonctionne pour d'autres clés, mais seulement comme cliquer, et ne pas tenir (et je ne sais pas, pourquoi).


@Gensagames parfois (malheureusement) la réponse à ce type de questions est simplement "ce n'est pas possible". Vous pouvez définitivement demander une nouvelle fonctionnalité ou contribuer à la fonctionnalité vous-même ici: Github.com/ SeleniumHQ / www.seleniumhq.org / Problèmes


@Gensagames Pouvez-vous décrire le comportement que vous essayez de tester?


Essayez de tester les changements de toile. Pour ex. chromedino.com Où doit contenir des touches.ARROW_DOWNODOWDOOD pendant un certain temps.


@Gensagames Je n'ai fait aucun projet nécessitant des événements de contrôle des essais sur une toile auparavant, mais je ne crois pas que le sélénium serait le bon outil pour cela. Je envisagerais d'utiliser un outil d'automatisation différent.



5
votes

Le pilote actuel pour chrome (version 2.30) implémente le protocole précédent où la maintien d'une clé n'est supporté que pour une clé de modification (contrôle, changement de modification, alt, commande).

Ce code fonctionne avec Firefox mais échoue avec chrome depuis l'événement keyup est émis pour chaque clé : xxx

mais, puisque, depuis la version 2.30, le pilote chromé prend en charge le send_command pour envoyer directement une commande brute via le protocole DEVTOOLS. Ainsi, comme une solution de contournement, vous pouvez appeler INPUT.DISPATCHKEYEvent pour émettre des événements à bas niveau .

Ceci est un exemple de travail avec selenium / chrome pour maintenir la touche w pendant une seconde: xxx


2 commentaires

Excellent! Pendant ce temps, c'est bon pour moi d'utiliser Firefox, mais pourquoi ces informations sont manquantes de partout? Et je ne comprends toujours pas quel est le problème de Chrome, de soutenir cette action! C'est tellement utile pour une certaine situation, comme les champs de canvas, où vous devez tester différentes entrées de clavier.


Le protocole a beaucoup changé entre sélénium 2 et 3, en particulier pour les actions chaînées. Vous pouvez trouver ces informations en lisant l'ancien et la nouvelle spécification. Je ne sais pas pourquoi Chrome n'a pas bougé vers la nouvelle API. Pourrait être une question de ressources / budget.