【发布时间】:2019-08-08 15:11:10
【问题描述】:
我是使用 selenium webdriver 进行自动化的新手。我正在尝试在旅游网站上预订航班。 (ryanair.com)
我遇到了弹出日期选择器。我只能使用 .sendkeys 输入日期,在单击日期输入上的任何字段后,它会触发弹出日历出现,所以如果输入的格式是 dd/mm/yyyy 并且我想输入“20042019”它只输入20 在 dd 然后自动选择当前月份和年份作为自动完成并打开日历弹出窗口。
我读过一些文章说这些日历通常有两种类型 1. iframe 2. datepicker - 我认为 ryanair 上的那个是基于下面 xpath 的 datepicker
//div[@id='datetimepicker_dateview']//table//tbody//td[not(contains(@class,'k-other-month')
也许这是错误的 xpath?但我认为这是正确的
我已尝试使用以下方法查找要预订的日期列表:
List<WebElement> list_AllDateToBook = driver.findElements(By.xpath()
System.out.println("size of list is : " + list_AllDateToBook.size() );
System.out.println("list is : " + list_AllDateToBook );
输出是: 列表大小为:0 列表是:[]
当我使用 xpath 输入日期字段的日期时,它适用于第一个输入:
WebElement day = driver.findElement(By.xpath("//*[@id='row-dates-pax']/div[1]/div/div[1]/div/div[2]/div[2]/div/input[1]"));
但是,当我将 xpath 更改为第二个输入时,它不会输入第二个输入(月)
WebElement day = driver.findElement(By.xpath("//*[@id='row-dates-pax']/div[1]/div/div[1]/div/div[2]/div[2]/div/input[2]"));
下面是一个日期选择器 HTML 示例(添加它太长了!)
<core-datepicker class="start-date" default-date="" start-date="18-03-2019" end-date="28-03-2020" highlight-from="20-03-2019" highlight-to="20-04-2019" end-show="true" fly-out="true" value="dateRange.startDate" cb-event-id="cal-selector:select-start-date" unavailable-dates="dateRange.unavailabiltyStartDates" selected-month-view="dateRange.startDateSelectedMonthView" show-month-toggle="::dateRange.showMonthToggle" show-single-month=""><!----><div ng-class="::{'has-monthly-toggle': isMonthToggleVisible()}"><div bindonce="" class="datepicker-wrapper r scrollable value-selected" ng-class="{ scrollable: !device.isPhone(), mobile: device.isPhone(), 'value-selected': value, 'six-rows': checkIf6Rows()}" style="transition-timing-function: cubic-bezier(0.1, 0.57, 0.1, 1); transition-duration: 0ms; transform: translate(0px, 0px) translateZ(0px);"><!----><!----><ul ng-if="!device.isPhone()"><!----><li bindonce="" ng-repeat="i in _monthViews" ng-class="{ 'starting-month': checkIfIsSame(getDate(i), highlightFrom, 'month'), 'selected-month': checkIfIsSame(getDate(i), value, 'month'), 'highlight-on': canHighlight(i) }" class="calendar-view starting-month selected-month"><h1 class="month-name">March 2019</h1><ul class="week-days"><!---->
我真的被困在这里了。任何建议都会很棒。
谢谢
【问题讨论】:
-
请在此处添加您要访问的元素的html
-
您是否尝试过通过 'data-id' 属性访问日历中的特定日期?说 //*[@data-id='24-03-2019']
-
@SameerArora - html 对于评论框来说太长了
-
@Hairdo 请仅在问题中添加。
-
您能否在问题中添加一些 HTML,它不必是完整的日期选择器代码,而是您尝试选择的几个日期元素的示例,或者如果这是您正在开发的公共网站,您可以提供链接吗? (您提到了瑞安航空,但我在主页上的日期选择器上找不到与问题匹配的元素)
标签: selenium selenium-webdriver automation calendar