如何 select 在 Selenium 的酒店预订网站中自动弹出酒店名称

how to select the auto popup hotel names in a hotel booking site in Selenium

我正在致力于实现以下酒店预订网站的自动化。我需要在第一个搜索框中输入酒店后 select 自动弹出酒店名称...我不知道该怎么做。

我浏览了 link 并单击了“演示”,然后单击了页面上出现的第一个 link。 我试图点击第一个搜索框,我需要从自动弹出列表中输入一家酒店……我不知道该怎么做,因为它没有 PAC 项目…… https://www.phptravels.net/home

public class Question1 {
    WebDriver Driver = null;
     WebDriverWait wait = null;
     String url = "https://phptravels.com/demo/";
    
     
     @BeforeTest
      public void beforeTest() {
         System.setProperty("webdriver.chrome.driver","src\test\resources\drivers\chromedriver.exe");
         ChromeOptions options = new ChromeOptions();
         options.setExperimentalOption("excludeSwitches",Arrays.asList("disable-popup-blocking"));
         options.addArguments("--disable-popup-blocking");
         
         Driver = new ChromeDriver(options);
         Driver.manage().window().maximize();
         Driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
         wait = new WebDriverWait(Driver, 25);

            
             String winHandle = Driver.getWindowHandle();
            //Driver.switchTo().window(winHandle);
             //new WebDriverWait(Driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[title='webpush-onsite']")));
             //new WebDriverWait(Driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button#deny.button.close"))).click();
      }
    
    @Test
  public void f() {
        Driver.get(url);
         System.out.println("*****In the main page*****");
        String xpathDemo = "//*[@id=\"mega-nav-navigation\"]/div/ul[1]/li[2]/a";
        Driver.findElement(By.xpath(xpathDemo)).click();
        String Title = "PHPTRAVELS | Travel Technology Partner";
        /*try {
        wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[@id=\"PopupSignupForm_0\"]/div[2]/div[1]")));
        Driver.findElement(By.xpath("//*[@id=\"PopupSignupForm_0\"]/div[2]/div[1]")).click();
        } catch(Exception e) {
            System.out.println("No popup..."+ e.getMessage());
        }
        */
        String username = Driver.findElement(By.xpath("//*[@id=\"Main\"]/section[2]/div/div/div[2]/div/div/div[2]/div[2]/div/div[3]/div[2]/div")).getAttribute("innerText");
        username = username.substring(6) ;
        String password = username.substring(30);
        System.out.println("Username text :"+username + "\npassword is:"+password);
        
        Driver.findElement(By.xpath("//*[@id=\"Main\"]/section[2]/div/div/div[2]/div/div/div[2]/div[2]/div/div[1]/div/a")).click();
        utils.HelperFunctions2.switchToWindow(Driver, Title);
        
        Driver.findElement(By.xpath("//*[@id=\"s2id_autogen16\"]")).click();
        Driver.findElement(By.xpath("/html/body/div[7]/ul")).click();
        
        
  }
  
  @AfterTest
  public void afterTest() {
      Driver.quit();
  }

}

我已经构建了机器人、自动图像选择器等,但我从未使用过 By.xpath 方法。类名更容易使用!

public void f(){
Driver.get(url);
String getInputFocusId = "select2-input";
Driver.findElement(By.className(getInputFocusId).click();
//now focused!
String text = Driver.findElement(By.className("select2-match").getText();
//text is the first default search match of the list.
}

还有一个比较复杂的方法。 在 Selenium 中,您可以将键发送到元素。

如果输入元素获得焦点,第一个匹配项也获得焦点。 通过单击 Enter,焦点匹配将被搜索并显示在输入元素中。 最后你必须从输入元素中读取数据!

public void f(){
Driver.get(url);
String getInputFocusId = "select2-input";
WebElement element = Driver.findElement(By.className(getInputFocusId);
element.click();
//element.sendKeys(Key.DOWN);
element.sendKeys(Key.ENTER);
String text = element.getText();
//this is the text of the first search match
//if you want to get the second or third just repeat sending the DOWN key.
    }

重要提示:确保 运行 每行延迟(200 毫秒是一个很好的时间)。这可以帮助您发现错误...例如,在 Instagram 身份验证过程中,我延迟了很多行,但它终于奏效了!

希望我的回答对你有帮助!!!

下面的 xpath 是第一家酒店的结果,更改索引后它将与其余元素一起处理。

将文本提交到酒店文本框后。 给出 Thread.sleep(2000); 使用下面的 xpath。希望有用

(.//ul[@class='select2-results']/following::div[@class='select2-result-label'])[2]