如何在Eclipse中使用硒路径从日历弹出窗口中选择日期

普里扬卡·斯里瓦斯塔瓦(priyanka srivastava)

我试图从日历弹出菜单中选择出发日期和返回日期,但是发现很难编写用于日期选择的通用代码。我试图编写一种方法,其中从主方法传递日期作为参数,该方法将执行并单击日历弹出窗口,然后选择单击日期。我已经编写了代码,直到找到月份为止,但是在此之后,我被困在日期路径上,请提供帮助。

弹出的屏幕截图:

在此处输入图片说明

我正在使用的网站是单击此处https://www.yatra.com/

Here is my code:



 package Website;

    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.TimeUnit;

    import org.openqa.selenium.By;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.NoSuchElementException;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;

    public class PickDateCalender {
        static WebDriver driver=new FirefoxDriver();;


        public static void main(String[] args) throws InterruptedException {



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

            driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
            WebElement element=driver.findElement(By.className("dropdown-toggle"));

            String ori="New Delhi, India (DEL)";
            String dest="Bangalore, India (BLR)";

            String DepartDte="23-October-2016";
            String splitter[]=DepartDte.split("-");
            String Departdate=splitter[0];
            System.out.println("date"+" "+Departdate);
            String Departmonth=splitter[1];
            System.out.println("month"+" "+Departmonth);
            String Departyear=splitter[2];
            System.out.println("year"+" "+Departyear);
            String returDte="";
            ;
            selectDate(Departdate,Departmonth,Departyear);

        }



public static void selectDate(String Depardate,String Departmonth,String Departyear ){
        WebElement Depart=driver.findElement(By.id("BE_flight_depart_date"));
        Depart.click();
        List <WebElement> month =driver.findElements(By.xpath(".//*[@id='PegasusCal-0']//ul[@class='month-list']"));
        for(int i=0;i<month.size();i++){
            String monname=month.get(i).getText();


            if(monname.contains(Departmonth)){
                System.out.println("Match found"+" "+monname);
                System.out.println("inside if");
                month.get(i).click();

                break;


                }
                driver.close();

            }
        }
    }
玛丹

您可以通过单个xpath轻松地做到这一点。由于每个日期都有一个唯一的ID

a_2017_3_13,即“ a_year_month_day”

您可以直接构建一个xpath并执行它。

 private void selectDate(String Departdate, String Departmonth, String Departyear) {
        //div[@id='PegasusCal-0']//a[@id='a_2017_3_13']
        String dateXpath = String.format(
                "//div[@id='PegasusCal-0']//a[@id='a_%s_%d_%s']",
                Departyear, getMonthNum(Departmonth), Departdate);
        driver.findElement(By.xpath(dateXpath)).click();
    }

     //As you are passing input in name 'October' parsing that to number
    private int getMonthNum(String monthName) {
        try {
            Date date = new SimpleDateFormat("MMM").parse(monthName);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            return cal.get(Calendar.MONTH) + 1;
        } catch (ParseException ex) {
            Logger.getLogger(Yatra.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 1;
    }

完整样本

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 *
 * @author Phystem
 */
public class Yatra {

    WebDriver driver;

    public Yatra() {
        System.setProperty("webdriver.chrome.driver", "D:\\Test\\chromedriver.exe");
        driver = new ChromeDriver();
    }

    public void start() {
        driver.get("https://www.yatra.com/");
        String DepartDte = "29-March-2017";
        String splitter[] = DepartDte.split("-");
        String Departdate = splitter[0];
        System.out.println("date" + " " + Departdate);
        String Departmonth = splitter[1];
        System.out.println("month" + " " + Departmonth);
        String Departyear = splitter[2];
        System.out.println("year" + " " + Departyear);
        String returDte = "";
        driver.findElement(By.name("flight_depart_date")).click();
        selectDate(Departdate, Departmonth, Departyear);
    }

    private void selectDate(String Departdate, String Departmonth, String Departyear) {
        //div[@id='PegasusCal-0']//a[@id='a_2017_3_13']
        String dateXpath = String.format(
                "//div[@id='PegasusCal-0']//a[@id='a_%s_%d_%s']",
                Departyear, getMonthNum(Departmonth), Departdate);
        driver.findElement(By.xpath(dateXpath)).click();
    }

    private int getMonthNum(String monthName) {
        try {
            Date date = new SimpleDateFormat("MMM").parse(monthName);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            return cal.get(Calendar.MONTH) + 1;
        } catch (ParseException ex) {
            Logger.getLogger(Yatra.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 1;
    }

    public static void main(String[] args) {
        new Yatra().start();
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章