2013-09-27 3 views
0

Я хочу выбрать/выбрать конкретную дату месяца, и мой экран отображает несколько месяцев на экране (например, JAN, FEB, MAR).Как получить/выбрать значения календаря с помощью xpath

Вот моя древовидная структура:

div class="MeCalendarMonthDay MeCalendarWeekDay3" 
style="width:14.285714285714286%;height:50px"> 
<span>14</span> 
<input type="hidden" value="Wed Aug 14 2013"> 
</div> 

Я попытался следующие варианты (я использую инструмент селеном автоматизации тестирования)

calender = driver.findElement(By.className("MeCalendarMonthNotSingle")); 
date = calender.findElement(By.xpath("//div[@class='MeCalendarMonthName' and  
contains(.='Aug 2013')]")); 
date.findElement(By.xpath("//input[@value = 'Tue Aug 13 2013']")).click(); 

Я также попытался

date.findElement(By.xpath("//input[@type='hidden' and value = 'Tue Aug 13 
2013']")).click(); 

Но, ни один из вышеперечисленных вариантов не работает для меня. Не могли бы вы мне помочь ?

Приведенный ниже вариант иногда работает. Однако он не может распознать месяц, так как на странице отображаются несколько месяцев, указанных на странице:
.

date.findElement(By.xpath("//span[text()='13']")).click();` 
+0

Много несоответствий на вашем входе и вашем коде или это только я? 'Ср Авг 14 2013' не соответствует' Tue Aug 13 2013'. –

+0

Извините, но ваше решение работает отлично. Большое спасибо. – user2803079

ответ

1

Здесь у вас есть решения XPath. Вы точно не знаете, какой элемент вы хотите быть возвращены:

Выбирается на @class от <div> и @value от <input>. Возвращает <input> элемент:

calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay')]/input[contains(@value, 'Aug 14')]")); 

Selects на @class от <div> и @value от <input>. Возвращает <div> элемент:

calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay') and input[contains(@value, 'Aug 14')]]")); 
calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay')][input[contains(@value, 'Aug 14')]]")); 

Selects на @class от <div> и text() от <span> и @value от <input>. Возвращает <input> элемент:

calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay') and span = 14]/input[contains(@value, 'Aug 14')]")); 
calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay')][span = 14]/input[contains(@value, 'Aug 14')]")); 

Selects на @class от <div> и text() от <span> и @value от <input>. Возвращает <div> элемент:

calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay') and input[contains(@value, 'Aug 14')] and span = 14]")); 
calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay')][span=14][input[contains(@value, 'Aug 14')]]")); 

Если вы хотите, чтобы <span> элемент должен быть возвращен:

Выбирается на @class от <div> и @value от <input>. Возвращает элемент <span>:

calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay')][input[contains(@value, 'Aug 14')]]/span")); 
calender.findElement(By.xpath("//div[contains(@class,'MeCalendarMonthDay') and input[contains(@value, 'Aug 14')]/span")); 
+0

Спасибо вам большое. Решение работает отлично и очень тщательно. Кроме того, можно ли параметризовать дату? date = Aug 14 - calender.findElement (By.xpath ("// div [содержит (@ class, 'MeCalendarMonthDay") и вход [содержит (@ значение, дата)]/span ")); ? – user2803079

+0

Вы можете параметризовать его. Это питон, который вы используете? Сначала объявите переменную 'date = "Aug 14", затем вы можете использовать ее так же, как в своем комментарии. –

Смежные вопросы