it-roy-ru.com

Как выбрать средство выбора даты в Selenium WebDriver

В настоящее время работаю над Selenium WebDriver и использую Java . Я хочу выбрать значения в date range из выпадающего списка. Я хочу знать, как я могу выбрать значения как Date, Month and year в выпадающем списке.

Вот тег HTML:

<dd id="date-element">
<input id="fromDate" class="hasDatepicker" type="text" style="width:57px; padding:3px 1px; font-size:11px;" readonly="readonly" name="fromDate" value="01 Jan 2013">

<input id="toDate" class="hasDatepicker" type="text" style="width:57px; padding:3px 1px; font-size:11px;" readonly="readonly" name="toDate" value="31 Dec 2013">  

enter image description here

Ниже приведен пример кода, который я попробовал:

Log.info("Clicking on From daterange dropdown");
JavascriptExecutor executor8 = (JavascriptExecutor)driver;
executor8.executeScript("document.getElementById('fromDate').style.display='block';");
Select select8 = new Select(driver.findElement(By.id("fromDate")));
select8.selectByVisibleText("10 Jan 2013");
Thread.sleep(3000);

Log.info("Clicking on To daterange dropdown");
JavascriptExecutor executor10 = (JavascriptExecutor)driver;
executor10.executeScript("document.getElementById('toDate').style.display='block';");
Select select10 = new Select(driver.findElement(By.id("toDate")));
select10.selectByVisibleText("31 Dec 2013");
Thread.sleep(3000);
9
Amirdha

DatePicker не является элементом Select. То, что вы делаете в своем коде, неверно. 

Datepicker - фактически таблица с набором строк и столбцов. Чтобы выбрать дату, вам просто нужно перейти к ячейке, где присутствует желаемая дата.

Итак, ваш код должен быть таким:

WebElement dateWidget = driver.findElement(your locator);
List<WebElement> columns=dateWidget.findElements(By.tagName("td"));

for (WebElement cell: columns){
   //Select 13th Date 
   if (cell.getText().equals("13")){
      cell.findElement(By.linkText("13")).click();
      break;
 }
12
Ant's

Вы не можете попробовать это, посмотрите, работает ли это для вас.

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

Код для от даты

((JavascriptExecutor)driver).executeScript ("document.getElementById('fromDate').removeAttribute('readonly',0);"); // Enables the from date box

WebElement fromDateBox= driver.findElement(By.id("fromDate"));
fromDateBox.clear();
fromDateBox.sendKeys("8-Dec-2014"); //Enter date in required format

Код для на сегодняшний день

((JavascriptExecutor)driver).executeScript ("document.getElementById('toDate').removeAttribute('readonly',0);"); // Enables the from date box

WebElement toDateBox= driver.findElement(By.id("toDate"));
toDateBox.clear();
toDateBox.sendKeys("15-Dec-2014"); //Enter date in required format
5
Shoaib Shaikh

Я думаю, что это можно сделать гораздо проще:

  1. Найдите локатор на месяц (используйте Firebug/Firepath)
  2. Вероятно, это элемент Select, используйте Selenium для выбора Month
  3. Сделать то же самое в течение года
  4. Нажмите на ссылкуТекст «31» или любую другую дату, которую хотите нажать.

Таким образом, код будет выглядеть примерно так:

WebElement month = driver.findElement(month combo locator);
Select monthCombo = new Select(month);
monthCombo.selectByVisibleText("March");

WebElement year = driver.findElement(year combo locator);
Select yearCombo = new Select(year);
yearCombo.selectByVisibleText("2015");

driver.click(By.linkText("31"));

Это не будет работать, если в выпадающем меню выбора даты не выбрано «Выбрать», но большинство из тех, что я видел, являются отдельными элементами («Выбрать», «Ссылки» и т.д.).

2
zmorris

Вы можете напрямую использовать следующий JavaScript

((JavascriptExecutor)driver).executeScript("document.getElementById('fromDate').setAttribute('value','10 Jan 2013')")
2
MilanYadav

попробуйте SendKeys вместо выбора даты

driver.FindElement(yourBy).SendKeys(yourDateTime.ToString("ddd, dd.MM.yyyy",CultureInfo.CreateSpecificCulture("en-US")));

Если это не работает, попробуйте отправить родную «вкладку»

element.SendKeys(OpenQA.Selenium.Keys.Tab);
1
pw1

Не вводите JavaScript. Это плохая практика.

Я бы смоделировал DatePicker как элемент типа textbox/select, как показано ниже. 

Для подробного ответа - проверьте здесь- http://www.testautomationguru.com/Selenium-webdriver-automating-custom-controls-datepicker/

public class DatePicker {

    private static final String dateFormat = "dd MMM yyyy";

    @FindBy(css = "a.ui-datepicker-prev")
    private WebElement prev;

    @FindBy(css = "a.ui-datepicker-next")
    private WebElement next;

    @FindBy(css = "div.ui-datepicker-title")
    private WebElement curDate;

    @FindBy(css = "a.ui-state-default")
    private List < WebElement > dates;

    public void setDate(String date) {

        long diff = this.getDateDifferenceInMonths(date);
        int day = this.getDay(date);

        WebElement arrow = diff >= 0 ? next : prev;
        diff = Math.abs(diff);

        //click the arrows
        for (int i = 0; i < diff; i++)
            arrow.click();

        //select the date
        dates.stream()
            .filter(ele - > Integer.parseInt(ele.getText()) == day)
            .findFirst()
            .ifPresent(ele - > ele.click());

    }

    private int getDay(String date) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat);
        LocalDate dpToDate = LocalDate.parse(date, dtf);
        return dpToDate.getDayOfMonth();
    }

    private long getDateDifferenceInMonths(String date) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat);
        LocalDate dpCurDate = LocalDate.parse("01 " + this.getCurrentMonthFromDatePicker(), dtf);
        LocalDate dpToDate = LocalDate.parse(date, dtf);
        return YearMonth.from(dpCurDate).until(dpToDate, ChronoUnit.MONTHS);
    }

    private String getCurrentMonthFromDatePicker() {
        return this.curDate.getText();
    }

}
0
vins
public String datePicker(String object,String data){
    APP_LOGS.debug("selecting date");
    try{

        WebElement dateWidget = driver.findElement(By.xpath(OR.getProperty(object)));

        List<WebElement> rows = dateWidget.findElements(By.tagName("tr"));  
        List<WebElement> columns = dateWidget.findElements(By.tagName("td"));  

        for (WebElement cell: columns){
            if (cell.getText().equals(data)){
                cell.findElement(By.linkText(data)).click();
                break; 
            }
        }
    }catch(Exception e){
        return Constants.KEYWORD_FAIL+" -- Not able to select the date"+e.getMessage();
    }
    return Constants.KEYWORD_PASS;
}
0
Shasak Singh Sengar