Использую PageFactory в тестах
Не срабатывает аннотация поиска елемента
поиск елемента:
[FindsBy(How = How.Id, Using = "account")]
[FindsBy(How = How.Id, Using = "Password")]
public IWebElement PasswordField;
в тесте падает если обращаюсь к этому елементу (пробую очистить)
page.PasswordField.Clear();
Ошибка
Clear failed at: ‘https:/Client/Registration’, calling element: ‘By.Id: account’
----> System.InvalidOperationException : Element must be user-editable in order to clear it.
т.е webdriver пробует очистить родительский елемент .
В чем я ошибся при написании FindsBy?
<div class="col-sm-4"><input id="Password" class="form-control" type="password" name="Password" data-val-required="Wymagane jest nowe hasło" data-val-regex-pattern="^[0-9a-zA-ZàáâäãåąćęèéêëìíîïłńòóôöõøùúûüÿýżźñçčšžÀÁÂÄÃÅĄĆĘÈÉÊËÌÍÎÏŁŃÒÓÔÖÕØÙÚÛÜŸÝŻŹÑßÇŒÆČŠŽ∂ð]*$" data-val-regex="Nowe hasło zawiera niedozwolone znaki" data-val-length-min="4" data-val-length-max="64" data-val-length="Powinien być między {0} ta {1} symbolami" data-val="true"/></div>
родительский елемент
div id=“account” не являеться полем input ,но я к нему и не обращась. он содержит форму в которой есть поле password, которое я и хочц очистить и ввести данные. Но почему-то очистить пытаеться родительский елемент судя с выдаваемой ошибки
Если я не ошибаюсь - то вы на поле 2 аннотации навесили(я не силен в c# и может быть мне показалось)? Если так - у Вас , возможно, первая берется и всё.
Так собственно я и хочу по цепочке FindsBy обратиться сначала к родительскому елементу , а потом за счет [FindsBy(How = How.Id, Using = “Password”)] уже в нем обраться к дочернему.
Я гуглил и нашел такой принцип записи, но видимо что-то не учел. Если кто пишет на c# и использует цепочки поиска елементов, то сможет мне подтвердить работает эта фича или нет.
Так собственно я и хочу по цепочке FindsBy обратиться сначала к родительскому елементу , а потом за счет [FindsBy(How = How.Id, Using = "Password")] уже в нем обраться к дочернему.
Я гуглил и нашел такой принцип записи, но видимо что-то не учел.
елементов с id=Password на странице два.
я переделал поиск и нахожу его по XPath. Но было интересно найти именно по цепочке родитель - вложенный елемент. Но похоже эта фича не работает для C#. Вот это и хочу прояснить для себя.
2 элемента с одним и тем же id?
“Ваши пчелы дают какой-то неправильный мед”.
Id уникален, в этом его прелесть.
есть вариант, что у вас внутри страницы есть iframe , и в нем есть елемент со схожим id.
А вообще , css например позволит так же найти через локатор “#account#Password”, но повтроюсь - с id все должно быть проще.
Насчет цепочки - что это за цепочка такая? В java например такая конструкция из 2х аннотаций не скомпилится.
Где-то видится подвох в Вашем вопросе)))
Я не смогу подробно обьяснить, но в общем - еэлементам присваиваеться Id с помощью мапперов (С# разработчики поймут). И на странице таких элементов может быть двое, никтьо не мешает этого сделать , браузеры так точно. Но в моем случае на странице регистрации есть 2 поля с одинокывм id, это форма логина и сама форма регистрации. @maxmalunov
вот линка [Заметка] [C#] Атрибут [FindsBy] в PageObject? – Дайте два!
но там немного другое, то что интересно было мне это вот такой подход
[FindsBySequence]
[FindsBy(How = How.Id, Using = "account", Priority = 0)]
[FindsBy(How = How.Id, Using = "Password", Priority = 1)]
public IWebElement PasswordField;
получилось как всегда, сам задал вопрос и сам на него ответил. правда еще получил немного малоинтересующей информации от модератора) видимо скучно ему