2017-06-15 4 views
2

Comment entrer un mot de passe dans la fenêtre d'alerte/de dialogue du navigateur. Il est affiché lorsque l'URL est chargée. Ce n'est pas une invite d'authentification de base mais une invite de mot de passe qui bloque toute interaction avec la page jusqu'à ce que le mot de passe soit entré. J'utilise du sélénium ruby ​​avec Capybara. Je l'ai essayé ce qui suit:Entrer le mot de passe dans le dialogue/l'invite

page.driver.browser.switch_to.alert.send_keys("Password") 

mais il ne pénètre pas dans quoi que ce soit

Prompt screenshot

+0

Alors qu'avez-vous essayé? –

+0

Essayé comme ceci s'il s'agit d'une alerte 'Alerte d'alerte = driver.switchTo(). Alert(); alert.sendKeys ("texte"); alert.accept(); ' –

+0

J'ai mis à jour la question avec ce que j'ai essayé jusqu'ici qui est similaire à ce que vous avez suggéré mais qui n'a pas fonctionné – Rahul

Répondre

2

Si ce que vous essayez de remplir est un système modal déclenché par JS window.prompt alors vous pouvez le manipuler comme

page.accept_prompt(with: "The text to fill in") do 
    page.click_button "Go" # whatever action triggers the prompt to appear 
end 

Si, au contraire, il est un système modal d'authentification (non ouvert par JS) alors vous ne pouvez pas y accéder à partir de Capybara, et devrez utiliser un outil d'automatisation complète du système spécifique à la plateforme que vous utilisez si vous ne pouvez pas passer les informations d'identification dans l'URL que vous êtes tenter d'accéder.

+0

qu'en est-il de l'utilisation de javascript/jquery 'page.execute_script (SIMULATE KEYPRESS)'? – fabersky

+0

Merci Thomas. Je n'ai pas réalisé que le texte peut être passé via l'option "with:". Cela a fonctionné mais je ne vois pas le texte rempli. J'avais déjà essayé send_keys qui ne semblait pas non plus remplir le texte dans l'invite, ce qui m'a fait chercher une autre option. Les deux fonctionnent mais le texte ne semble pas rempli. Quoi qu'il en soit, ce que vous avez suggéré a fonctionné. – Rahul

+1

@fabersky Si vous faites référence au cas d'un système système non ouvert par JS, vous ne pouvez généralement pas exécuter quoi que ce soit une fois que vous l'avez ouvert. –

2

Cela peut vous aider: -

String Password = URLEncoder.encode ("pass") ;

String UserName = URLEncoder.encode ("NomUtilisateur");

Chaîne url = Chaîne.format ("http://%s:%[email protected]", Nom d'utilisateur, Mot de passe);

Dans ce% s est variable qui passe à url sous forme de paramètre.

Vous pouvez consulter cette URL aussi https://serverfault.com/questions/371907/can-you-pass-user-pass-for-http-basic-authentication-in-url-parameters

+0

cette réponse n'est pas très utile et ne répond pas du tout à la question. –