Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Кастомный инпут на форме, ацептанц тесты

codeception
webdriver
php
testng
Теги: #<Tag:0x00007f7b64e20310> #<Tag:0x00007f7b64e201d0> #<Tag:0x00007f7b64e20090> #<Tag:0x00007f7b64e27f20>

(Kirill “Eats Full Lemons” Fimchenko) #1

Добрый день товарищи,

В процессе создания фронтендных тестов наткнулся на кастомный инпут, для которого не срабатывают fillField и pressKey, попытался через хелпер создать функцию под такой кастмный инпут, но как то не вышло

public function sendKeysToDateInput($target, $keysString) {
		$elements = $this->getModule('WebDriver')->_findElements($target);
		$elements->sendKeys($keysString);
	}

Но тут случается ошибка что сендкейс вызывается не для обьекта.
Call to a member function sendKeys() on a non-object
in C:\xampp\htdocs\codeception\tests_support\Helper\Acceptance.php:14
Полистав документацию и немного погуглив я не нашел подобных примеров.

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

Заранее списабо!


(Ray Romanov) #2

У меня вопрос, почему ищешь элементЫ, а не элемент?


(Konstantin) #3

ну да RayRom прав findElements обычно возвращает массив со всеми элементами найденнми на странице которые соответвтсуют $target


(Kirill “Eats Full Lemons” Fimchenko) #4

public function sendKeysToDateInput($target, $keysString) {
$element = $this->getModule(‘WebDriver’)-_findElement($target);
$element->sendKeys($keysString);
}

Я пробовал и так, но тут снова ошибка(

FATAL ERROR. TESTS NOT FINISHED.
Call to undefined method Codeception\Module\WebDriver::_findElement()


(Kirill “Eats Full Lemons” Fimchenko) #5

В обычном силениума да так и есть, но в кодецептионе так не получается. Но учитывая что стандартный прессКей и филлФилд не работают, проблема все равно не в этом(

Сделал тесты для проекта, где нет автоматизации, застопорился на одном кастомном инпуте((


(Ray Romanov) #6

Вернемся к исходному, так как findElement требует много дополнительного:

public function sendKeysToDateInput($target, $keysString) {
    		$elements = $this->getModule('WebDriver')->_findElements($target);
    		$elements[0]->sendKeys($keysString);
    	}

(Kirill “Eats Full Lemons” Fimchenko) #7

Да, теперь ошибки нет, но на кастомный инпут все равно не реагирует(
В инпуте по дефолту стоят точки, которые нельзя удалить и можно вводить только цифры. (предполагается вводы даты в формате dd.MM.yyyy)
Не могу придумать как еще попытаться заполнить этот инпут


(Ray Romanov) #8

Ссылку на проект не нужно, а вот структуру этого инпута не помешало бы лицезреть…


(Kirill “Eats Full Lemons” Fimchenko) #9

Не очень понял, что вы имеете ввиду под структурой инпута, но вот есть такая штука

input class=“passInfo__field__input_date” data-bind="css:{
‘passInfo__field__input_date’: modelType == ‘parameterDate’,
‘passInfo__field__input_haserror’: !isVisibleValid() && errorMessageVisible()
},
attr: {
‘placeholder’: index() == ‘docNumber’&& $parent.parameters().nationality().value() ?
($.i18n.exists(‘passinfo’, ‘passinfo-field__docType__type_’+$parent.parameters().docType().value()+’’+$parent.parameters().nationality().value()+‘placeholder’) ?
$.i18n.get(‘passinfo’, 'passinfo-field__docType__type
’+$parent.parameters().docType().value()+’
’+$parent.parameters().nationality().value()+‘placeholder’) :
($.i18n.exists(‘passinfo’, ‘doc_info’+$parent.parameters().docType().value()+‘placeholder’) ?
$.i18n.get(‘passinfo’, 'passinfo-field__docType__type
’+$parent.parameters().docType().value()+'placeholder’) :
‘’)) :
($.i18n.exists(‘passinfo’, 'passinfo-field
’+index()+‘pass_placeholder’) ?
$.i18n.get(‘passinfo’, 'passinfo-field
’+index()+’__pass_placeholder’) :
‘’)
},
value:inputValue,
valueUpdate:‘keyup’,
hasFocus: hasFocus,
passInfoFields: inputValue,
showInternationalHint: {focus: hasFocus(), rootModel: $root}
" type=“text” placeholder=“Дата рождения”>

Но тут много внутреннего js кода, не могу представить как это поможет. И не стоит обращаться внимания на некоторые названия, немного изменил их.