DatepickerElement.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Mtf\Client\Element;
  7. use Magento\Mtf\Client\Locator;
  8. /**
  9. * General class for datepicker elements.
  10. */
  11. class DatepickerElement extends SimpleElement
  12. {
  13. /**
  14. * DatePicker button.
  15. *
  16. * @var string
  17. */
  18. protected $datePickerButton = './../button[contains(@class,"ui-datepicker-trigger")]';
  19. /**
  20. * DatePicker block.
  21. *
  22. * @var string
  23. */
  24. protected $datePickerBlock = './ancestor::body//*[@id="ui-datepicker-div"]';
  25. /**
  26. * Field Month on the DatePicker.
  27. *
  28. * @var string
  29. */
  30. protected $datePickerMonth = './/*[contains(@class,"ui-datepicker-month")]';
  31. /**
  32. * Field Year on the DatePicker.
  33. *
  34. * @var string
  35. */
  36. protected $datePickerYear = './/*[contains(@class,"ui-datepicker-year")]';
  37. /**
  38. * Calendar on the DatePicker.
  39. *
  40. * @var string
  41. */
  42. protected $datePickerCalendar = './/*[contains(@class,"ui-datepicker-calendar")]//*/td/a[text()="%s"]';
  43. /**
  44. * DatePicker button 'Close'.
  45. *
  46. * @var string
  47. */
  48. protected $datePickerButtonClose = './/*[contains(@class,"ui-datepicker-close")]';
  49. /**
  50. * Set the date from datePicker.
  51. *
  52. * @param string $value
  53. * @return void
  54. */
  55. public function setValue($value)
  56. {
  57. $date = $this->parseDate($value);
  58. $date[1] = ltrim($date[1], '0');
  59. $this->click();
  60. $datapicker = $this->find($this->datePickerBlock, Locator::SELECTOR_XPATH);
  61. $datepickerClose = $datapicker->find($this->datePickerButtonClose, Locator::SELECTOR_XPATH);
  62. if (!$datepickerClose->isVisible()) {
  63. $this->find($this->datePickerButton, Locator::SELECTOR_XPATH)->click();
  64. }
  65. $datapicker->find($this->datePickerYear, Locator::SELECTOR_XPATH, 'select')->setValue($date[2]);
  66. $datapicker->find($this->datePickerMonth, Locator::SELECTOR_XPATH, 'select')->setValue($date[0]);
  67. $datapicker->find(sprintf($this->datePickerCalendar, $date[1]), Locator::SELECTOR_XPATH)->click();
  68. if ($datapicker->isVisible()) {
  69. $datepickerClose->click();
  70. }
  71. }
  72. /**
  73. * Parse date from string to array.
  74. *
  75. * @param string $value
  76. * @return array
  77. */
  78. protected function parseDate($value)
  79. {
  80. $formatDate = '%b %d, %Y %I:%M %p';
  81. if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
  82. $formatDate = str_replace('%d', '%#d', $formatDate);
  83. }
  84. $date = strtotime($value);
  85. $date = strftime($formatDate, $date);
  86. $date = preg_split('/[,\s]/', $date);
  87. array_splice($date, 2, 1);
  88. return $date;
  89. }
  90. }