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
4 Réponses :
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")) {
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.
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();
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();
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']
Références: