Selenium C# Nunit3 Element not visible так как вне зоны видимости и браузер не скролит

Вы проверьте в одном месте. Поможет это или нет. Зачем сразу везде менять? :slight_smile:

запускать на Linux vm или контейнере / Xvfb или vnc / Chrome или FF не пробовали ? все проблемы сразу решите

1 лайк

по моему еще javascrtipt ом можно двигать - несколько способов есть
например основанный на DOM методе

разнообозные его обертки

1 лайк

Попробуйте (IJavaScriptExecutor)Driver.ExecuteScript(“window.scrollTo(0,document.body.scrollHeight);”);
У меня работает.
Если не получится, пробуйте через new Actions(Driver).MoveToElement(element).Click().Perform();

1 лайк

@Noksa @Ihor_Kokhan Попробовала принудительно задавать размер окна, максимизировать, настраивать установки Crome на машине, на которой запускаются тесты. Ничего не помогло.
Сработало только Actions(Driver).MoveToElement(element).Click().Perform();
Но в этом случае мне нужно сделать свой метод Click2, который будет включать Actions(Driver).MoveToElement(element).Click().Perform(); + Click(). И вызывать именно этот клик во всех проблемных местах.

@sergueik на Linux я пока не готова переходить. Недостаток знаний потребует больше усилий для решения проблемы.

Уже включает в себе клик. Реплейс можете сделать по всему солюшену через ctrl+F в студии
2018-10-10_1147

2 лайка

Actions(Driver).MoveToElement(element).Click().Perform();

@Ihor_Kokhan а конечно, можно сделать замену по всему проекту. Но как? :slight_smile:
Например :
list.btnDelete.Click();
т.е. мне нужно Actions(Driver).MoveToElement(list.btnDelete).Click().Perform();
Или я не правильно поняла?

что нибудь типа

find . -type f -a -name '*.cs' -exec sed -i 's/\(.*\).Click()/Actions(Driver).MoveToElement(\1).Click().Perform();/p' {} \;

может подойдет ? - я только что проверил что работает как надо :slight_smile:
это выполнять из git bash если у вас windows вокруг

1 лайк

именно.
Заходите в студию. Нажимаете ctrl+F. Потом стрелочку в левом верхнем углу диалога чтоб свичнутся на реплейс. И меняете current document на Entire Solution. Скриншот диалога лепил выше.

@Ihor_Kokhan а captures студия визуаль умеет тоже ?

@sergueik Что вы имеете ввиду под словом captures? И как это относится к вопросу автора? :thinking:

если в коде который надо поменять переменная была каждый раз разная то нужно capture

( ) Defines a marked subexpression. The string matched within the parentheses can be recalled later (see the next entry, \n). A marked subexpression is also called a block or capturing group. BRE mode requires ( ).
\n Matches what the nth marked subexpression matched, where n is a digit from 1 to 9. This construct is vaguely defined in the POSIX.2 standard. Some tools allow referencing more than nine capturing groups.

я лично Visual Studio не использую слишком тяжелая - и ответа на знаю так что сарказма в моем вопросе не было

Я понял о чем вы. Я не встречал такого. Я вижу 2 варианта:

  1. Заменить все вхождения Click на кастомный метод ExtendedClick (как писал выше автор)

  2. Заменить все вхождения Click на new Actions(Driver).MoveToElement(element).
    Сбилдить и потом уже руками перекинуть в MoveToElement и дописать .Perform(); (или заменить Click() на Click().Perform(); )

Eclise умеет!Capture-eclipse

сам только что узнал - с радостью

В студии тоже есть :wink: Спросил у коллег) Я просто никогда не пользовался
2018-10-11_1006

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

А если бы использовался - то поменять надо было бы максимум в парочке.

@Ihor_Kokhan , @sergueik Спасибо, все получилось :blush:

@Noksa Какой именно паттерн вы имеете ввиду?

Как у меня организован проект, вкратце. Есть отдельные классы с объектами страниц (например обекты страницы Логин, объкты страницы Корзина). Есть отдельные классы с ключевыми методами на страницах (Метод залогиниться, Метод добавить корзину, удалить корзину и.т). В этих методах я использую элементы из страницы с объектами.
А так же есть сами тесты которые используют методы Логин, добавить в корзину, удалить корзину.

Имеется ввиду Page Object

Имеется ввиду [Page Object](https://automated-testing.info/tags/page-object)

Так вот: Есть отдельные классы с объектами страниц (например обекты страницы Логин, объкты страницы Корзина)

Нашла такой пример.
http://autoqa.org/advanced-webdriver/ispolzovanie-page-object-patterna-selenium-webdriver.html
Только в этом примере и методы и объекты страницы в одном классе, а у меня это разные классы. Потому что много страниц и много методов описывающих разные поведение на каждой странице.