J'essaie d'implémenter le scénario suivant 1. Ouvrez le navigateur Chrome et ouvrez greyhound.com 2. Recherchez un trajet en sélectionnant une source, une destination. 3. Choisissez une date de début, une date de retour. 4. Enfin, cliquez sur le bouton de recherche pour trouver les bus disponibles.Comment gérer le calendrier qui se chevauche avec d'autres éléments dans l'automatisation Selenium en utilisant Java?
Les quatre premiers champs fonctionnent correctement. Après avoir choisi la date de retour, le calendrier ne se fermera pas, ce qui pose un problème pour cliquer sur le bouton de recherche. Le calendrier se chevauche avec le bouton de recherche et le rend non-cliquable. Pour surmonter cela, j'ai utilisé Thread.sleep() pour laisser du temps pour la fermeture du calendrier et cela fonctionne très bien. Comment puis-je y parvenir en utilisant le concept d'attente sélénium? Les attentes implicites et explicites ne fonctionneront pas pour moi.
public class UsingChrome {
public static void main(String args[]) throws InterruptedException {
//Chrome Driver
System.setProperty("webdriver.chrome.driver", "Y:\\Selenium\\chromedriver.exe");
//Creating driver element
WebDriver driver = new ChromeDriver();
//Implicit Wait
//driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//To maximize browser window
driver.manage().window().maximize();
//Open webpage
driver.get("https://www.greyhound.com/");
//Scroll
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,300)", "");
//Select an origin and destination
driver.findElement(By.id("fromLocation")).sendKeys("New York, NY");
driver.findElement(By.id("toLocation")).sendKeys("Boston, MA");
// To input a date using 'sendKeys'
//Choose a Start Date
driver.findElement(By.id("datepicker-from")).click();
driver.findElement(By.id("datepicker-from")).sendKeys("10/22/2017");
//Choose an End Date
driver.findElement(By.id("datepicker-to")).click();
driver.findElement(By.id("datepicker-to")).sendKeys("10/27/2017");
driver.findElement(By.id("datepicker-to")).sendKeys(Keys.ENTER);
//Explicit wait
WebDriverWait wait = new WebDriverWait(driver, 300);
WebElement search = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id=\'fare-search-btn\']")));
search.click();
//Search
//Thread.sleep(3000);
driver.findElement(By.id("fare-search-btn")).click();
//driver.quit();
}
}
Ci-dessus la solution fournie par @JeffC fonctionnera, vous pouvez improviser le code ci-dessus en utilisant couramment l'attente. check this [link] (https://stackoverflow.com/questions/28224943/webdriver-wait-until-invisibility-of-element) –
@richardmendonca 'FluentWait' est juste une version entièrement personnalisable de' WebDriverWait'. Il n'y a pas besoin d'ici car le code ci-dessus fera ce que l'OP a besoin. – JeffC
@JeffC Cette invisibilité de l'élément que vous avez utilisé a fonctionné. Merci! – Yuga