1
votes

Comment faire en sorte que le sélénium clique sur un bouton sans identifiant?

J'essaie de cliquer sur un bouton sans identifiant dans l'élément inspect c'est ce que j'obtiens lorsque je recherche le bouton dans la source de la page:

C'est le bouton de connexion dans ce lien: https://myportal.lau.edu.lb/Pages/studentPortal.aspx

toute aide serait appréciée. J'utilise Java sur Mac OS


0 commentaires

4 Réponses :


2
votes

Vous devez trouver un autre moyen d'identifier le bouton. Dans ce cas, vous pouvez utiliser le nom de la balise ("input") et le texte que nous voyons à l'écran ("Log In").

Essayez ceci pour commencer:

if (input.getAttribute("value").equals("Log In")) {


4 commentaires

Merci pour votre réponse! J'ai copié votre code et je ne change que "pilote Web" en "pilote" parce que c'est comme ça que je le nomme et j'ai obtenu ceci: imgur .com / DRocb1r


Nous référençons différentes classes List . Vous devez indiquer à votre code où trouver la classe appropriée. Ajoutez cette ligne en haut de votre fichier de classe: import java.util.List; Ou, vous pouvez modifier la ligne de code défaillante pour référencer java.util.List à la place de Liste .


Merci! A travaillé comme un charme. Cela vous dérange-t-il cependant d'expliquer le code?


J'ai ajouté une explication au cas où vous seriez curieux, mais consultez la réponse de Greg pour une solution plus concise.



2
votes

Ceci est trivial en utilisant une expression XPath:

String xpath = "//input[@type = 'submit' and @value = 'Log In']";
WebElement button = driver.findElement(By.xpath(xpath));

button.click();


0 commentaires

0
votes

Si vous voulez le faire avec css et éviter les problèmes ennuyeux (comme la page se charge toujours et le bouton n'est pas encore disponible), vous pouvez faire ce qui suit:

By cssLocator = By.cssSelector("input[type='submit']");
int timeout = 5000;

//wait for element to be visible, even if the page is not fully loaded ( element not in the DOM ), after the timeout it will throw an TimeoutException.
new WebDriverWait(webDriver, timeout)
        .ignoring(NoSuchElementException.class) //This is when you know that the element may not be on the screen during the loading, if you try to wait for it when it's not on the DOM, it will throw this exception.
        .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(cssLocator));

WebElement loginBtn = driver.findElement(cssLocator));
loginBtn.click();


0 commentaires

0
votes

Le bouton a l'attribut value qui identifie de manière unique il, vous pouvez faire correspondre le bouton en utilisant son attribut value avec une expression XPath comme:

//input[@value='Log In']

 entrez la description de l'image ici

Références:


0 commentaires