J'essaie de cliquer sur un calendrier du site Web suivant en utilisant Selenium avec Java (3.3.0 et version java "1.8.0_66").

https://www.cathaypacific.com/cx/en_US.html

Cible sur laquelle il faut cliquer - Vols - Aller simple - Bouton «Départ activé» Quelles que soient les options possibles que j'ai essayées - by.id, by.xpath et Actions, EventFiringMouse etc., ce bouton n'est pas du tout cliqué.

"<div class="button-date-picker-wrapper field-group cx-inputfield">
<span class="field-label input-filled" aria-hidden="true">Departing on</span>
<button id="dppju1sm" class="button-date-picker field-button from-button has-dates input-filled" role="link" type="button" data-ui-overlay-shared="true" data-ui-overlay-id="trip-dates-picker" aria-expanded="false" aria-label="Departing on Thursday 20 April 2017">
</div>"
private static void pickFlightCode() throws InterruptedException {

    WebElement element = driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]"));
    //wdwait.until(ExpectedConditions.elementToBeClickable(element));
    Actions actions=new Actions(driver);
    actions.moveToElement(element).moveToElement(driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]"))).click().build().perform();
    element = driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]"));
    System.out.println(element.getAttribute("aria-hidden"));

}

(ou)

driver.findElement(By.xpath("//div[1]/button[starts-with(@id,'dp')]")).click(); String js = "document.getElementById("field-label").style.display = "block";'; arguments[0].style.visibility='visible';";

Le code ci-dessus ne fonctionne pas et j'obtiens l'exception «Élément non visible». Driver.findElement - isEnabled renvoie true et Driver.findElement - isDisplayed renvoie false.

Est-ce quelque chose à voir avec l'attribut 'aria-hidden' = true dans span? Comment gérer «aria-hidden» et cliquer sur le bouton?

1
Muthu Kumar 20 avril 2017 à 05:15

3 réponses

Meilleure réponse

Afin d'atteindre le contrôle requis, vous pouvez utiliser son conteneur. Par conséquent, essayez de suivre:

//div[@data-date-picker-id='book-trip']//button[starts-with(@id,'dp') and starts-with(@aria-label, 'Departing on ')]

Faites-moi savoir si cela fonctionne pour vous.

0
Mahipal 20 avril 2017 à 04:34

Essayez ce code JavaScript pour activer la visibilité de l'élément sélectionné.

WebElement element = driver.findElement(By.xpath("Element Xpath"));
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) driver).executeScript(js, elem);
0
Chandra Shekhar 20 avril 2017 à 11:13

Essayez ceci pour le xpath du bouton -

//div[@class = 'dates-picker-wrapper splited-date-picker flight-datepicker']/div[1]/button

J'ai vérifié cela dans Firefox et cela fonctionne pour moi.

0
Anish Pillai 20 avril 2017 à 02:30