Tous mes tests Geb/Spock fonctionnaient parfaitement sur Firefox, puis j'ai essayé avec Chrome (v59) et il reste suspendu lorsqu'une fenêtre d'alerte ou de confirmation est déclenchée.Interaction avec <dialog> avec Geb/Selenium (uniquement avec Chrome)
Avec Firefox, j'utilisais withAlert{}
ou withConfirm{}
pour les gérer, mais cela ne fonctionne pas avec Chrome.
J'ai donc creusé un peu dans les vues et j'ai découvert que la boîte de dialogue était gérée par this widget. J'ai donc créé des accesseurs à <dialog>
dans mon objet page mais Chrome est toujours incapable d'interagir avec lui (aucun moyen de détecter que la fenêtre pop-up est affichée ou de la fermer). J'ai essayé plusieurs choses comme utiliser displayed
ou attendre que le texte soit affiché mais rien n'a fonctionné.
Je ne suis pas habitué à jQuery alors peut-être qu'il me manque quelque chose ici?
Voici un exemple du code que je dois interagir avec:
<dialog class="qq-alert-dialog-selector">
<div class="qq-dialog-message-selector"></div>
<div class="qq-dialog-buttons">
<button type="button" class="qq-cancel-button-selector">Close</button>
</div>
</dialog>
Et voilà comment je tente d'accéder à (dans mon objet page):
alertPopUp {$("dialog", class:"qq-alert-dialog-selector")}
alertCloseButton {alertPopUp.children("div.qq-dialog-buttons").children("button")}
Et enfin comment Je voudrais tester la pop-up:
when: "Trying to upload ..."
uploadFileButton = incorrect.absolutePath
then: "An alerting pop up occurs"
waitFor{alertPopUp.displayed}
when: "Closing the pop up"
alertCloseButton.click(SubmitAClaim)
then: "Number of uploaded files should not change"
uploadedElements.size() == initialUploadedFiles
Quelqu'un peut-il aider? Je suppose que cela a quelque chose à voir avec l'accent de chrome (je veux dire si elle est actuellement sur le pop-up ou sur la page derrière
EDIT:.
Après tout, il semble que le problème . n'est pas lié avec jQuery (bonne chose que je suppose) Nous pouvons vérifier la boîte de dialogue est ouvert grâce à open attribute à <dialog>
je l'ai fait quelque chose comme ça.
when: "Trying to upload ..."
uploadFileButton = incorrect.absolutePath
then: "A alerting pop up occurs"
waitFor {alertPopUp.getAttribute("open") == "true"}
Mais je ne peux toujours pas interagir avec la boîte de dialogue: quand j'essaye de c lécher sur alertCloseButton
il soulève un ElementNotVisibleException
. Cela a donc quelque chose à voir avec la focalisation du navigateur, je suppose. Je essayé:
withWindow{}
oudriver.switchTo().window()
mais la seule fenêtre disponible est le principal.withFrame()
mais je reçois unNoSuchFrameException
driver.switchTo().alert()
mais soulèvent unNoAlertRaisedException
Je me demande si quelqu'un sait comment Chrome considère étiquette <dialog>
(alerte, confirmer, ...)?
Note: Selon caniuse.com, Chrome est le seul navigateur compatible avec
<dialog>
pour l'instant.
J'ai réussi à tester si la fenêtre pop-up est affichée en utilisant 'waitFor {alertPopUp.getAttribute (" open ")! = Null}' elle passe mais je ne suis même pas sûre qu'elle s'affirme vraiment sur la bonne chose. Je continue à cliquer sur le bouton dans la boîte de dialogue. Le sélénium soulève une 'ElementNotVisibleException' et j'ai déjà vérifié: il n'y a pas plusieurs éléments sélectionnés avec un élément non visible. Il n'y en a qu'un ('alertCloseButton.size() == 1'). Est-ce que quelqu'un a une idée ou est-ce que je m'enregistre comme un problème sur ChromeDriver 2.30? – Saub