Voici mon code pour cliquer sur un simple bouton de connexion sur ce site Website
import Java.util.concurrent.TimeUnit;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
public class Reports {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("https://platform.drawbrid.ge");
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.findElement(By.xpath(".//*[@id='_loginButton']")).click();
}
}
Je reçois l'erreur suivante:
Exception dans le fil "principal" org.openqa.Selenium.ElementNotVisibleException: L'élément n'est pas visible et ne peut donc pas être interagi avec. Durée de la commande ou délai d'attente: 2,05 secondes
Vous avez deux boutons avec xpath sur cette page, le premier n’est pas visible, c’est pourquoi vous obtenez une exception ElementNotVisibleException.
L'un est sous <div class="loginPopup">
La seconde (celle dont vous avez besoin) est sous <div class="page">
Alors changez votre xpath pour qu'il ressemble à ceci, et cela résoudra votre problème:
By.xpath("//div[@class='page']//div[@id='_loginButton']")
Il y a même 3 éléments avec id="_loginButton"
sur la page, et un seul est visible - celui situé dans le formulaire de connexion, vous pouvez l'obtenir avec un sélecteur CSS :
By.cssSelector("form#_loginForm div#_loginButton")
Il y a 3 occurrences de id="_loginButton"
.
Utilisez le id="_loginButton"
sous class="signIn"
par cssSelector pour obtenir le bouton exact dans la page.
By.cssSelector("div.signIn div#_loginButton")
public static void Listget (WebDriver driver) throws Exception
{
Thread.sleep(5000);
UtilityMethod.getAppLocaters(driver, "closeicon").click();
Actions action = new Actions(driver);
WebElement we = driver.findElement(By.xpath("//li[@class='parent dropdown aligned-left']"));
Thread.sleep(5000);
action.moveToElement(we).build().perform();
List<WebElement>links = driver.findElements(By.xpath("//span[@class='menu-title']"));
int total_count = links.size();
System.out.println("Total size :=" +total_count);
for(int i=0;i<total_count;i++)
{
WebElement element = links.get(i);
String text = element.getAttribute("innerHTML");
System.out.println("linksnameis:=" +text);
try{
File src = new File("D:ReadFile.xlsx");
FileInputStream fis = new FileInputStream(src);
XSSFWorkbook wb=new XSSFWorkbook(fis);
XSSFSheet sh = wb.getSheetAt(0);
sh.createRow(i).createCell(1).setCellValue(text);
FileOutputStream fos = new FileOutputStream(new File("D:/ReadFile.xlsx"));
wb.write(fos);
fos.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
}
Webdriver
peut générer une exception ElementNotVisible
s'il existe plusieurs éléments avec le même localisateur et si Webdriver
a déjà traité l'un des éléments correspondants.
Dans de tels scénarios, vous pouvez d’abord obtenir la taille de l’élément en utilisant
int var_ele_size= driver.findElements(By.xpath("locator")).size();
puis prenez le premier élément de la liste et cliquez sur l'élément.
driver.findElements(By.xpath("locator")).get(var_ele_size-1).click();