Не срабатывает аннотация FindsBy (С# + webdriver)


(Sergey Korol) #6

Чтение FAQ очень упростит процесс вставки html верстки в сообщениях. :wink:


(Serhii) #7

я отформатировал как код ctrl+k.но на html не сработало , т.к мой кусок html отрисовался браузером.


(Sergey Korol) #8

Вы лишь подтвердили факт непрочтения FAQ.


(sidelnikovmike) #9

Если я не ошибаюсь - то вы на поле 2 аннотации навесили(я не силен в c# и может быть мне показалось)? Если так - у Вас , возможно, первая берется и всё.


(Serhii) #10

Так собственно я и хочу по цепочке FindsBy обратиться сначала к родительскому елементу , а потом за счет [FindsBy(How = How.Id, Using = “Password”)] уже в нем обраться к дочернему.
Я гуглил и нашел такой принцип записи, но видимо что-то не учел. Если кто пишет на c# и использует цепочки поиска елементов, то сможет мне подтвердить работает эта фича или нет.


(Serhii) #11

тем не менее , в комментарии выше я отформатировал как код. или есть специылные теги для html’а? в FAQ я их не нашел


(Sergey Korol) #12

No comments.

Или же можно вставить код, а потом до и после вставить (3) ``` строки для форматирования кода.

Можно еще указать какой язык вы показываете, чтобы подсветка была точно правильной

Извините, что лично для вас не указали пример с html, вместо python.


(Максим Малунов) #13
Так собственно я и хочу по цепочке FindsBy обратиться сначала к родительскому елементу , а потом за счет [FindsBy(How = How.Id, Using = "Password")] уже в нем обраться к дочернему.
Я гуглил и нашел такой принцип записи, но видимо что-то не учел.

Можно попросить ссылку на данную запись .

по решению задачи . на Java

@FindBy(xpath = "//h1[@data-navigation-link]")
    private WebElement pageHeader;

и потом в нем

pageHeader.findElement()

(sidelnikovmike) #14

Не очень понял, зачем цепочка. Почему сразу не искать по id=Password? Только один такой элемент на странице может быть.


(Serhii) #15

елементов с id=Password на странице два.
я переделал поиск и нахожу его по XPath. Но было интересно найти именно по цепочке родитель - вложенный елемент. Но похоже эта фича не работает для C#. Вот это и хочу прояснить для себя.


(sidelnikovmike) #16

2 элемента с одним и тем же id?
“Ваши пчелы дают какой-то неправильный мед”.
Id уникален, в этом его прелесть.
есть вариант, что у вас внутри страницы есть iframe , и в нем есть елемент со схожим id.
А вообще , css например позволит так же найти через локатор “#account #Password”, но повтроюсь - с id все должно быть проще.
Насчет цепочки - что это за цепочка такая? В java например такая конструкция из 2х аннотаций не скомпилится.
Где-то видится подвох в Вашем вопросе)))


(Максим Малунов) #17
есть вариант, что у вас внутри страницы есть iframe , и в нем есть елемент со схожим id. 

Имхо без переключения в iframe так не получиться .


(Serhii) #18

ничего страшного. зато теперь думаю добавите.


(Serhii) #19

Я не смогу подробно обьяснить, но в общем - еэлементам присваиваеться 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;

получилось как всегда, сам задал вопрос и сам на него ответил. правда еще получил немного малоинтересующей информации от модератора) видимо скучно ему


(sidelnikovmike) #20

Разумеется. Вообщем еще более удивительно становится :smile:


(Serhii) #21

ну да с# это вам не java


(sidelnikovmike) #22

Ну вот, ссылку бы сразу скинули - и хоть понятно стало бы, откуда такая информация.

По поводу уникальности id - тут java, не java - это не есть правильно.
Пока не нашел правда какой-то официальной информации в стандартах, но по 2-м ссылкам(1 и 2(перевод первой)) указано, что id уникален на странице. Скажите своим разработчикам, чтобы они не делали так.
Во-первых - вам будет удобнее тесты писать.
Во-вторых - если они потом возьмут, и начнут писать какие-то обработчики событий на js, они могут поймать проблемы с тем, что у них есть несколько элементов с id одним и тем же. Конечно, их можно обойти, но всё же.

Попробую позже еще поискать про правила.

И еще - на будущее - заметку писал @dzhariy, можно было обратиться к нему либо в ЛС, либо в посте изначально его попросить помощи. Избежали бы немного гнева нашего доброго и справдливого модератора @ArtOfLife :smile: .


(Serhii) #23

ну то что id должен быть уникальным на странице я и сам был убежден. до недавнего времени, но посмотрев на код и послушав обьяснения разработчиков , убедился сам что иногда профитнее сделать с одинаковыми id .
Ну и как видим не сложно в тестах исправить , всего-то дописать 2 строчки кода.


(Максим Малунов) #24
ну то что id должен быть уникальным на странице я  и сам был убежден. до
 недавнего времени, но посмотрев на код и послушав обьяснения 
разработчиков , убедился сам что иногда профитнее сделать с одинаковыми 
id .

это такое пасхальное яичко для тех кто будет поддерживать / дописывать скрипты .

 [FindsBySequence]
    [FindsBy(How = How.Id, Using = "account", Priority = 0)]
    [FindsBy(How = How.Id, Using = "Password", Priority = 1)]
    public IWebElement PasswordField;

В принципе и xpath и сss поддерживает комбинирование путей .
В xpath через | в css через ,


(sidelnikovmike) #25

Хм. А можете рассказать, когда это профитнее?