#angular #protractor
#angular #транспортир
Вопрос:
Я использую формы на основе моделей, где моя форма выглядит так:
<form [formGroup]="form" (ngSubmit)="onSubmit(form.value)">
<input type="text" formControlName="username">
<input type="password" formControlName="password">
<button type="submit" [disabled]="!form.valid">Submit</button>
</form>
Я хочу написать спецификацию транспортира для проверки входа в систему. Я хотел бы сделать что-то вроде следующего в моей спецификации:
element(by.formControlName('username')).sendKeys('test@example.com');
Это, очевидно, не работает, так есть ли способ найти элементы управления формой или я смирился с тем фактом, что мне нужно указать класс или идентификатор в полях ввода?
Ответ №1:
Вы можете написать довольно простой CSS-селектор:
element(by.css("input[formControlName=username]")).sendKeys('test@example.com');
Обратите внимание, что если вам нужно делать это часто, вы всегда можете определить пользовательский локатор для повторного использования:
by.addLocator('formControlName', function(value, opt_parentElement, opt_rootSelector) {
var using = opt_parentElement || document;
return using.querySelectorAll('[formControlName="' value '"]');
});
Использование:
element(by.formControlName('username')).sendKeys('test@example.com');
Комментарии:
1. by.css работает, спасибо. Куда бы я поместил addLocator, если я хочу использовать его глобально в своем приложении?
2. @MarkKenny отлично, вы должны поместить функцию
by.addLocator
intoonPrepare()
в конфигурацию вашего транспортира..3. Спасибо, что перезвонили мне. Может быть, я слишком новичок в protractor, но я просто копирую / вставляю
by.addLocator
фрагмент кода в свою функцию onPrepare, и это просто заставляет все зависать. Возможно, проблема с конфигурацией где-то в другом месте. Когда я разберусь с этим, я опубликую4. Похоже, что это проблема с Chrome и драйвером Chrome. Работает, если я переключаюсь на Firefox. Chrome driver v2.22 и Chrome v49, по-видимому, совместимы, но когда я запускаю свои тесты, Chrome зависает.