Проблема в том, что DIV
с классом scombobox-list
не является элементом в раскрывающемся списке, а является раскрывающимся.На странице их больше одного, например, «Происхождение», «Место назначения» и т. Д. Ваш код elements.get(4).click();
пытается щелкнуть 4-й раскрывающийся список , а не 4-й вариант в раскрывающемся списке.Вы можете обойти это, посмотрев дальше вверх по DOM из выпадающего списка, и найдите уникальный элемент, относящийся к Origin, Destination и т. Д. В этом случае есть DIV
, который является контейнером для всех связанных с Origin элементов.,
<div class="col-md-3 col-sm-6 widget-div-input scombobox" id="departsfrom-div" placeholder="Origin">
Поскольку у него есть идентификатор, мы можем использовать его в наших локаторах для указания дочерних элементов, не беспокоясь о других возможных совпадениях.Это решит проблему с несколькими существующими выпадающими списками.
Большая часть вашего кода зацикливается и выполняет сопоставление строк, чтобы найти нужный элемент.Вы бы гораздо лучше служили для достижения этого с локаторами.В этом случае вы можете щелкнуть раскрывающийся список, чтобы открыть его, а затем щелкнуть элемент, содержащий нужное название аэропорта, например «Ахмедабад (AMD)»
driver.get("https://www.airvistara.com/trip/");
driver.manage().window().maximize();
setOriginAirport("Ahmedabad (AMD)");
, и затем иметь функцию, которая устанавливаетаэропорту происхождения с указанием названия аэропорта.
public void setOriginAirport(string airportName)
{
driver.findElement(By.cssSelector("#departsfrom-div .location_icon")).click();
By locator = By.xpath("//div[@id='departsfrom-div']//span[contains(.,'" + airportName + "')]");
WebElement e = new WebDriverWait(driver, 5).Until(ExpectedConditions.elementToBeClickable(locator));
Thread.sleep(500); // may need this even after wait
e.click();
}