Выбор календарной даты из JavaScriptExecutor в селене - PullRequest
0 голосов
/ 09 мая 2020

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

package SeleniumSessions;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class SelectCalendarByJS {

    public static void main(String[] args) {


        System.setProperty("webdriver.chrome.driver","F:\\Drivers\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();

        driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        driver.get("https://www.makemytrip.com/");

        //WebElement date = driver.findElement(By.xpath("//div[@class = 'fsw_inputBox dates inactiveWidget ']"));

        WebElement date = driver.findElement(By.xpath("//input[@id = 'departure']"));

        String dateVal = "Friday, 19 Jun 2020";

        selectDateByJS(driver, date, dateVal);

        //driver.quit();

    }

    public static void selectDateByJS(WebDriver driver , WebElement element , String dateVal) {
        JavascriptExecutor js = ((JavascriptExecutor)driver);
        js.executeScript("arguments[0].setAttribute('value','"+dateVal+"');", element);

    }
}

А ниже - HTML DOM для атрибута, который я выбираю.

<input data-cy="departure" id="departure" type="text" class="fsw_inputField font20" readonly="" value="Friday, 19 Jun 2020">

1 Ответ

1 голос
/ 09 мая 2020

Проблема с элементом выбора даты отъезда makemytrip заключается в том, что вы не можете отправить ему ключи. Ваш код может работать для приложения Expedia, где вы можете изменить атрибут значения текстового поля, и это будет работать. Но в случае makemytrip вам нужно будет щелкнуть элемент, а затем вам нужно будет щелкнуть дату, как показано в приведенном ниже коде. Если вы увидите, что выбор даты происходит в одном элементе, а выбранная дата отображается в другом элементе (если вы увидите тег P, вы поймете, что выбранная дата отображается в теге P, а не в тот же элемент).

  @Test
    public void test() throws InterruptedException {
         driver.manage().window().maximize();
         driver.manage().deleteAllCookies();

         driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
         driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         WebElement date = driver.findElement(By.xpath("//*[@id=\"root\"]/div/div[2]/div/div/div[2]/div[1]/div[3]"));

         date.click();

        // System.out.println(driver.findElement(By.xpath()));

         Thread.sleep(3000);
         String dateVal = "Tue Jun 16 2020";
        selectDateByJS(driver, dateVal);

        Thread.sleep(3000);
    }

    public static void selectDateByJS(WebDriver driver, String dateVal) {

        JavascriptExecutor js = ((JavascriptExecutor)driver);
        js.executeScript("arguments[0].click();", driver.findElement(By.xpath("//div[@class='DayPicker-Day' and @aria-label='"+dateVal+ "']")));

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...