как выбрать автоматически всплывающие названия отелей на сайте бронирования отелей в Selenium - PullRequest
0 голосов
/ 06 августа 2020

Я работаю над автоматизацией следующего сайта бронирования отелей. Мне нужно выбрать автоматически всплывающее название отеля, как только я наберу отель в первом поле поиска ... Я не знаю, как это сделать.

Я перешел по ссылке и щелкнул Демо, затем щелкнул первая ссылка, которая появилась на странице. Я попытался нажать на первое поле поиска, и мне нужно ввести отель из автоматически всплывающего списка ... Я не знаю, как это сделать, потому что здесь нет PA C -элемента ... 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();
  }

}

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Ниже xpath является результатом 1-го отеля, изменение индекса не повлияет на остальные элементы.

После ввода текста в текстовое поле отеля. дать Thread.sleep (2000); используйте ниже xpath. Надеюсь заработает

(.//ul[@class='select2-results']/following::div[@class='select2-result-label'])[2]
0 голосов
/ 06 августа 2020

Я уже создал ботов, средства автоматического выбора изображений и многое другое, и я никогда не использовал метод 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 я задержал много строк, и, наконец, это сработало!

Надеюсь, мой ответ вам поможет !!!

...