Java 如何从AJAX日期选择器中选择日期

Java 如何从AJAX日期选择器中选择日期,java,selenium,selenium-webdriver,browser-automation,Java,Selenium,Selenium Webdriver,Browser Automation,我们公司开始实施自动化测试,我更喜欢使用java的SeleniumWebDriver。我对selenium和stack overflow也是新手, 问题?如何从Ajax日期选择器中选择日期?我在Java中使用SeleniumWebDriver HTML: 开放日期* 请加满。 2018年6月» 苏莫图韦 Fr Sa 27 28 29 30 31 1. 2. 同一行会更多,这些都是我得到的与文本框相关的东西请找到这样做的代码: 日历: 希望对您有所帮助。 您可以复制逻辑并根据日历进行调整。将密

我们公司开始实施自动化测试,我更喜欢使用java的SeleniumWebDriver。我对selenium和stack overflow也是新手, 问题?如何从Ajax日期选择器中选择日期?我在Java中使用SeleniumWebDriver

HTML:


开放日期*
请加满。
2018年6月»
苏莫图韦
Fr
Sa
27
28
29
30
31
1.
2.

同一行会更多,这些都是我得到的与文本框相关的东西

请找到这样做的代码:
日历:

希望对您有所帮助。

您可以复制逻辑并根据日历进行调整。

将密钥发送到打开日期字段如何?我可以通过此代码单击WebElement dateWidget=driver.findelelement(By.id(“qstarton”);dateWidget.click();您无需点击日历,只需点击输入字段并使用input.sendKeys(“2018/06/27”);使用选择日期手册Y2452627282930时看到的相同日期格式,如果这对您没有帮助,您可以随时在sandpdangi13@gmail.com
<div class="col-md-3">
<div class="form-group">
<label for="">Open Date <span class="text-danger">*</span></label><input type="text" id="qstarton" required="" name="qstarton" class="form-control datepicker32">
<span class="text-danger" id="error_qstarton">Please fill it.</span>
  </div>
  </div>

<div class="datepicker datepicker-dropdown dropdown-menu datepicker-orient-left datepicker-orient-top" style="display: block; top: 210px; left: 761.5px;">
<div class="datepicker-days" style="display: block;"><table class="table table-condensed"><thead><tr>
<th colspan="5" class="datepicker-switch">June 2018</th><th class="next" style="visibility: visible;">»</th></tr>
<tr><th class="dow">Su</th><th class="dow">Mo</th><th class="dow">Tu</th><th class="dow">We</th><th class="dow">Th</th>

<th class="dow">Fr</th>
<th class="dow">Sa</th></tr></thead>


<tbody><tr><td class="old disabled day">27</td>
<td class="old disabled day">28</td>
<td class="old disabled day">29</td>
<td class="old disabled day">30</td>
<td class="old disabled day">31</td>
<td class="disabled day">1</td>
<td class="disabled day">2</td> </tr>
package com.demo.core;

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;
import org.openqa.selenium.interactions.Actions;

public class JqueryCalender {

    private static WebDriver driver;
    private static final String INNERTEXT = "innerText";

    public static void main(String[] args) {

        String onwardDate = "19 February 2041";
        driver = getChromeDriver();  // get your driver here
        driver.manage().window().maximize();
        driver.navigate().to("http://jqueryui.com/resources/demos/datepicker/other-months.html");

        // setting onward date
        setOnwardDate(driver, onwardDate);
    }

    /** It will set the onward date : format of date should be "1 Mar 2018"
     * @param driver
     * @param onwardDate
     */
    public static void setOnwardDate(WebDriver driver, String onwardDate) {
        System.out.println("##########  Setting onward date : " + onwardDate);
        actionClick(driver, driver.findElements(By.cssSelector("input[id='datepicker']")).get(0));  // clicking on onward calendar
        setMonthAndYear(driver, onwardDate);   // setting month and year
        String exactOnwardDate = onwardDate.split(" ")[0];
        WebElement dateElement = driver.findElements(By.cssSelector("a[class='ui-state-default']")).stream().filter(element -> element.getAttribute(INNERTEXT).trim().equals(exactOnwardDate)).findFirst().get();
        jsClick(driver, dateElement); // setting the date
    }


    /** It will set calendar date.
     * @param driver
     * @param date : date format should be "1 march 2018"
     */
    private static void setMonthAndYear(WebDriver driver, String date) {
        String completeDate[] = date.split(" ");
        String monthYear = completeDate[1] + " " + completeDate[2];
        while(!(driver.findElements(By.cssSelector("div.ui-datepicker-title span")).get(0).getAttribute(INNERTEXT).trim() + " " +  driver.findElements(By.cssSelector("div.ui-datepicker-title span")).get(1).getAttribute(INNERTEXT).trim()).equals(monthYear)) {
            driver.findElements(By.cssSelector("a[title='Next']")).get(0).click();
        }
    }

    /** It will click on a WebElement using javascript
     * @param driver
     * @param element
     */
    public static void jsClick(WebDriver driver, WebElement element) {
        System.out.println("#########  Performing JS Click on element :" + element);
        ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
    }

    /** It will click on an element using Actions class
     * @param driver
     * @param element
     */
    public static void actionClick(WebDriver driver, WebElement element) {
        System.out.println("#########  Performing Action Click on element :" + element);
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().build().perform();
    }

    /**
     * @return ChromeDriver instance
     */
    private static WebDriver getChromeDriver() {
        System.out.println("######### Getting chromedriver ###################");
        System.setProperty("webdriver.chrome.driver",
                           "D:\\ECLIPSE-WORKSPACE\\Selenium-Demo\\src\\main\\resources\\drivers\\chromedriver-2.35.exe");

        return new ChromeDriver();
    }

}