如何在硒中处理此网站 "https://www.goibibo.com/" "from" 和 "destination" 框中的自动建议

how handle auto suggest in "from" and "destination" box for this website "https://www.goibibo.com/" in selenium

如何在 selenium 中处理此网站“https://www.goibibo.com/”的“发件人”和“目的地”框中的自动建议。 请帮忙

我厌倦了使用基本方法但无法获取自动建议下拉的 X 路径

无法点击下拉菜单

package basic;
    
import java.util.List;
import java.util.concurrent.TimeUnit;
    
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
    
public class goibibo {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.goibibo.com/");

        new WebDriverWait(driver, 20)
                .until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']")))
                .sendKeys("Mum");
        List<WebElement> myList = new WebDriverWait(driver, 20).until(
                ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id=\"react-autosuggest-1\"]")));
        for (WebElement element : myList) {
            if (element.getText().contains("Mumbai"))
                ;
            element.click();
        }

    }

}

所以您可以尝试一种解决方案,请找到下面的屏幕截图,

如您在屏幕截图中所见,如果我在文本框中键入 M,则下拉列表会显示与字母 'M' 相关的记录,如果您在源代码中看到 <ul>,如您所见,它是动态的在 <input> 以下,因此您需要通过它的定位器处理该下拉列表,它是动态的,因此首先您需要在文本框中传递一些文本,然后您需要使用 [=] select 下拉列表中的元素13=] 在 selenium 中你使用 selectByVisibleText("") 或者你可以使用 List<Element> 你可以存储来自下拉列表的所有受人尊敬的来源(孟买,迈索尔等)并明智地使用它

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc'"]))).sendKeys("M");
List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("Xpath of the dynamic drop down")));
for (WebElement element:myList) {
    if(element.getText().contains("Mumbai"));
        element.click();
}

我给了你一个想法,如果你需要任何进一步的帮助,请告诉我

使用下面的代码就可以了

Webelement ele=driver.findelement()

Actions ob = new Actions(driver);
ob.moveToElement(ele);
ob.click(ele);
Action action  = ob.build();
action.perform();

Chrome 浏览器

首先如何在 Chrome 浏览器中找到自动填充框的 XPATH 打开您的网站,然后单击检查元素并立即单击源选项卡,单击以打开自动填充框并按 **F8** **键暂停调试器**。然后单击您的元素选项卡,您可以轻松地获取 xpath 参考下面的快照以获取更多信息。所以它会冻结你的HTML。

现在单击“元素”并创建您自己的 xpath。

火狐浏览器

第二,如何在 Firefox 中找到自动填充框的 xpath - 打开您的 Firefox 并右键单击并单击您网站上的检查元素。有动画选项,因此它将打开所有 DOM 展开,如下图所示。因此,通过阅读此 dom 结构,您可以轻松创建 XPATH。

不是如何从自动填充框中查找元素。请参考下面的代码片段。

package com.software.testing;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
    
public class Testingclass extends DriverFactory {
    
    private static WebDriver driver = null;
    
    public static void main(String[] args) throws InterruptedException {
    
        System.setProperty("webdriver.chrome.driver", "your driver path");
        driver = new ChromeDriver();
        driver.get("https://www.goibibo.com/");
        new WebDriverWait(driver, 20)
                .until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']")))
                .sendKeys("A");
        Thread.sleep(1000);
        List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfAllElementsLocatedBy(
                By.xpath("//div[@class='dib marginL10 pad0 textOverflow width90']/div/span")));
        for (int i = 0; i < myList.size(); i++) {
            System.out.println(myList.get(i).getText());
            if (myList.get(i).getText().equals("Ahmedabad")) {
                myList.get(i).click();
                break;
            }
        }
    
    }
}

Don't forgot to use break after your conditional statement else it will thrown an exception.

我已经使用 python 通过 selenium 将其自动化。它将所有建议的城市收集在一个列表中,然后单击所需的城市。

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.goibibo.com/")
driver.implicitly_wait(3)
listCity = []
driver.find_element_by_xpath("//input[@id='gosuggest_inputSrc']").send_keys("JA")
cities = driver.find_elements_by_xpath("//div[@class='mainTxt clearfix']//preceding-sibling::span")
for city in cities:
    listCity.append(city.text)

for city in cities:
    if "Jagdalpur" in city.text:
        city.click()
        break

print(listCity)
print(len(listCity))