Как правильно использовать WebDriverWait вместе с PageObject ?

csharp
nunit
page-object
webdriver
selenium
Теги: #<Tag:0x00007fedbb864e20> #<Tag:0x00007fedbb864cb8> #<Tag:0x00007fedbb864b00> #<Tag:0x00007fedbb8649c0> #<Tag:0x00007fedbb864768>

(Саша Левченко) #1

Подскажите Пожалуйста как правильно использовать WebDriverWait вместе с #page-object !

не могу понять как оформить класс для ожидания! Ведь в WebDriverWait необходимо непосредственно указывать путь к элементу, а в методологии PageObject все элементы инициализируются при создании обекта!

Если что извините за неправильную формулировку! я новичок в этом!
Спасибо за помощь!


(Виталий Коряков) #2

В сетапе используйте implicitly_wait, да и все

class Test(unittest.TestCase):

def setUp(self):
    self.driver = Driver.get()
    self.driver.implicitly_wait(10)

(Саша Левченко) #3

Спасибо Вам Огромное за ответ! я пишу на c#, приложение в win form! я не использую NUnit!
Это так для информации! Забыл в описании написать!

вот пример кода

class Login_Page
    {
        [FindsBy(How = How.Id, Using = ("user-phone"))]
        public IWebElement phone_field;

        [FindsBy(How = How.XPath, Using = ".//*[@id='auth-form']/button[3]")]
        public IWebElement login_submit;

        public Login_Page(IWebDriver browser)
        {
            PageFactory.InitElements(browser, this);
        }
    }

Все элементы инициализируются в конструкторе


(Виталий Коряков) #4

В c# не помогу, но концепция такая - описываете BaseTest, в котором собираете базовые метода, собственно setUp и tearDown, а последнующие тесты наследуете от BaseTest, где в свою очередь будет вам и драйвер, и ожидание.


(Саша Левченко) #5

Тоэсть все что связано с драйвером я описываю в BaseTest?

а сам BaseTest является наследник моих Pages??

или как правильно??

у меня пока что такая система
есть классы страниц и есть классы тестов

классы тестов наследуются от нужных страниц!!!

Можете пожалуйста подсказать это правильно?? или не совсем!
Посоветуйте пожалуйста как лучше! Спасибо!


(Виталий Коряков) #6

нет, неправильно. Классы тестов от BaseTest, а классы страниц от BasePage, это как пример. Тест - это тест, а страница - это страница. Не путайте руки и ноги )))


(Саша Левченко) #7

Значит мне необходимо создать еще два класса один BasePage который будет наследоваться от Pages и второй BaseTest от которого будет наследоваться непосредственно Тест!

Всю действия работы с элементами страницы мне необходимо описать в BasePage!

А всю логику непосредственно в Тесте!

я правильно все понял?
Извините за настойчивость! Просто реально ко всему сам дохожу, а спросить не у кого вообще! Спасибо!


(Виталий Коряков) #8

Так почитайте тогда концепцию Пейдж Обджект ), инфы в инете масса.
Вот на Стеке есть тема с линками

Нет, наоборот, пейджи будут наследоваться от BasePage


(Саша Левченко) #9

Спасибо за помощь буду разбираться!)


(Саша Левченко) #10

Последний вопрос! а в BasePage будут хранится все элементы страницы??


(Виталий Коряков) #11

Я бы посоветовал вам еще вот этоту лекцию послушать от Миши

Плюс, если вы впервые столкнулись с этим, то как вариант, возьмите на час-два менторство.

что вы подразумеваете под элементами страницы?
Если это локаторы, то нет, локаторы храните отдельно.


(Саша Левченко) #12

Слушал уже) но думаю надо еще раз!) у меня просто совсем другой проект! и мне как то тяжело сопоставить! Но это скорее от недостатка опыта и знаний! В Общем Спасибо вам за помощь)


(Виталий Коряков) #13

шаблон работает независимо от проекта, на то он и шаблон )))
Базовые вещи будут стандартными все равно


(Alexander Zvonov) #14

@Sashuteak, подход к ожиданиям в вашем коде может быть разным. Зависит от вашего уровня владения ООП, вижена и целей. Что касается WebDriverWait, могу порекомендовать вам, для начала, объявить его в BasePage классе и в дальнейшем использовать в методах страниц наследников. Таким образом, вам не придется заботится об ожиданиях при написании тест скриптов. Ожидания будут инкапсулированы в функциональные методы работы со страницей.


(asolntsev) #15

Нет ничего подобного в методологии пэдж обжектов!
Это очень распространённое заблуждение, к сожалению.

Пишите нормальный метод, который ждёт чего надо и ищет нужный элемент.
См. http://asolntsev.github.io/ru/2016/07/09/true-page-object/