【问题标题】:Selenium Datepicker using JavascriptExecutorSelenium Datepicker 使用 JavascriptExecutor
【发布时间】:2020-06-09 21:19:08
【问题描述】:

请告知是否接受这种方法来使用 Selenium 取货日期

WebDriver driver = new ChromeDriver();

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

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

Thread.sleep(3000);

JavascriptExecutor js = ((JavascriptExecutor)driver);

js.executeScript ("document.getElementById('ctl00_mainContent_view_date1').removeAttribute('readonly',0);"); 

WebElement onwards_date = driver.findElement(By.id("ctl00_mainContent_view_date1"));
        onwards_date.clear();
        onwards_date.sendKeys("28/02"); 

js.executeScript ("document.getElementById('ctl00_mainContent_view_date2').removeAttribute('readonly',0);"); 

WebElement return_Date = driver.findElement(By.id("ctl00_mainContent_view_date2"));
        return_Date.clear();
        return_Date.sendKeys("27/03"); 

【问题讨论】:

    标签: javascript java selenium selenium-webdriver datepicker


    【解决方案1】:

    您可以使用 JavaScript 设置值,以 从日期 输入 ctl00_mainContent_txt_Fromdate id 和 至今 输入 ctl00_mainContent_txt_Todate id。您不会从 UI 中看到值发生变化,但它确实有效。

    js.executeScript("arguments[0].value = arguments[1]",
        driver.findElement(By.id("ctl00_mainContent_txt_Fromdate")), "28-02-2020");
    

    不要在您的代码中使用sleep,而是使用WebDriverWait,这会使WebDriver 等待某个条件,并且只会等待所需的时间。

    WebDriver driver = new ChromeDriver();
    WebDriverWait wait = new WebDriverWait(driver, 10);
    JavascriptExecutor js = (JavascriptExecutor) driver;
    driver.manage().window().maximize();
    
    driver.get("https://www.spicejet.com/");
    
    // Wait for Search button to be clickable, the state in which we assume that the site has loaded
    WebElement searchButton = wait.until(ExpectedConditions.elementToBeClickable(By.id("ctl00_mainContent_btn_FindFlights")));
    
    // Select From and To Cities
    
    js.executeScript("arguments[0].value = arguments[1]",
            driver.findElement(By.id("ctl00_mainContent_txt_Fromdate")), "28-02-2020");
    
    js.executeScript("arguments[0].value = arguments[1]",
            driver.findElement(By.id("ctl00_mainContent_txt_Todate")), "01-03-2020");
    
    searchButton.click();
    

    【讨论】:

      【解决方案2】:

      要在网站https://www.spicejet.com/DEPART DATE 字段中使用SeleniumexecuteScript() 方法从JavascriptExecutor 获取日期,您可以使用以下Locator Strategies

      • 代码块:

          System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
          ChromeOptions options = new ChromeOptions();
          options.addArguments("start-maximized");
          options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
          options.setExperimentalOption("useAutomationExtension", false);
          WebDriver driver =  new ChromeDriver(options);
          driver.get("https://www.spicejet.com/");
          WebElement element = driver.findElement(By.cssSelector("input[name$= 'txt_Fromdate']"));
          ((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('readonly')", element);
          WebElement newElement = driver.findElement(By.cssSelector("input[name$= 'txt_Fromdate']"));
          ((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('value','28/02')", newElement);
        
      • 浏览器快照:


      参考

      您可以在以下位置找到一些相关的详细讨论:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2023-02-23
        • 2019-03-25
        • 1970-01-01
        • 2019-03-12
        • 2019-08-03
        • 2018-10-18
        相关资源
        最近更新 更多