@vtimchenko87, сперва, проверьте какая версия WebDriver, которую вы используете. Всегда используйте последнюю, ну или, хотя-бы чтобы она была > 2.30
только в диагностических целях, перед сбором информации с таблицы, поставьте Thread.sleep(4000);
Если тест отработает правильно, замените Thread.sleep(4000); на метод класса WebDriverWait
Локатор для ссылок в таблице у вас правильный. Я подозреваю, что либо таблица не успела погрузиться, либо по направлению не было поездов в указанное время.
Да , получил текст с этого xpath '//*[@id="langs"]/li[1]/a/b' , но почему не могу получить текст с этого элемента "//*[@id='ts_res_tbl']//tr[1]/td[1]/a" ?
Есть разные подходы, implicit wait будет действовать глообально на все элементы.
WebDriverWait действует локально и ожидает выполнения некоторого условия, вот есть такая тема
заинтересовала данная тематика!
Так как часто ежу домой и в Киев решил тоже написать свой фреймворк для booking.uz.gov.ua!
драйвер проходиться по кнопкам “Выбрать” и оставляет заказы в корзину, потом делает скриншот и через каждые 30 мин этот скрин приходит на почту! Таким образом мы можем видеть все поезда и их стоимость по данному направлению и в выбранное время, просто зайдя в свой почтовый ящик!
Четко выделенные методы действия в PageObject’ ах, например в OrderPage.java
В OrderTest.java достаточно четко выраженный код сценария.
В SendMail, конечно, накручено с кучей параметров. Я бы вынес эти 16 параметров лучше в отдельный класс, и принимал бы его как единственный параметр в SendMail.sendMail
Закрыв глаза на сoding conventions, локаторы и т.д., я не говорю, что это очень плохой код - бывает в разы хуже, но и на идеальный он тоже не тянет. Поэтому и спрашиваю - важна ли для автора критика.
try{
if (Postel.isSelected()){
Postel.click();
}
}catch(Exception e){
System.out.println("error - there is no Postel in this train "+ e.getMessage());
e.printStackTrace();
}
Зачем такие извращения с public static void main(String[] args) и мавеном, когда у листенера testng есть onFinish(ITestContext testContext)?
Ну и не удержусь - там же вполне вменяемый локатор рисуется?
привет!
спасибо! дельные комментарии! я согласен! перезалил!
по пункту 3 там по другому было непросто выкрутиться,чтобы дождаться блочка(он яваскриптом подтягивается) но я вспомнил про Xpath)
4. - если использовать конструкцию
то тут тоже по имплиситу нужно ждать!
5. Знаю лутше тянуть джарники мейвеном, но пока руки не дошли нормально разобраться, с антом как-то проще
6. исправил
Я для себя выбрал такой путь, что имплисит вейт у меня по дефолту – ноль.
Для проверки, использую код, похожий на тот, что приведенный по ссылке, но усложненный обстоятельствами:
Отлавливаю не все Exceptions, а только от вебдрайвера, и сохраняю ошибки в переменную. Это необходимо для того, чтобы в случае таймаута вывести предыдущию ошибку в лог
Поддерживается таймаут в ожидании. Да… было один раз, что скрипт хотел ожидать элемента вечсность. Пришлось убить и таймаут добавить.
Есть метод с одним параметром и таймаутом по умолчанию.
На C# есть очень удобная конструкция методов-расширений, и в реальном коде, это выглядет так:
// внутри пейджобжекта
this.txtLoginField.Wait().SendKeys(“hello”)
Т.е. Wait-у неявно прийдет параметр txtLoginField, которого он и будет ждать.
Мелочи поправили, а основное либо не поняли, либо не исправили.
Попробую на пальцах:
A. Почему не сделать так, и навсегда забыть о PageFactory и getWebDriver()?
public Page() {
this.driver = getWebDriver();
PageFactory.initElements(driver, this);
}
B. То, что вы объявили переменные “String fromCity” и т.д. ничего не меняет - это все равно хардкод, ровно как и magic numbers, а-ля “new WebDriverWait(driver, 10)” и прочее. Входные данные на то и “входные” - они должны быть отдельно, особенно в данном случае. Вот например скачал я с гит хаба и хочу использовать, вот только незадача - мне надо направление Киев-Минск в 11-00, в Киев 11.01.2014, а обратно 14-го, да и email надо бы изменить. И да - джаву я не знаю. Вы представляете сколько мне времени придется потратить, изучая сорсы, что бы найти где-что поменять? В одном только SendEmail адрес нужно поменять в 4-х местах.
С. У вас люто-бешено закручена отправка emails. Я, признаться, впал в пятиминутный ступор, когда пытался в этом разобраться. К чему эта гора таргетов в build.xml и void main(String[] args), когда более логично это бы смотрелось в листенере по onFinish()?
Не совсем понятно что конкретно присужено @vmaximv, но судя по формулировке что-то не очень приятное
Только вот не совсем понятно за что - особо злобных формулировок вроде нет, все замечания по делу (предварительно получено согласие автора на критику).
Особо злобных формулировок действительно не было, и это – хорошо. Но, на мой взгляд, градус критики возрос. Хотелось бы, снизить его, и вернуть стиль общения в более конструктивное русло.
Конкретно, эта первая фраза, задает окрас всему остальному сообщению:
И я не спорю, замечания @vmaximv, действительно по делу. И я понимаю, что @vmaximv писал их из лучших побуждений. Но, на мой взгляд, сделаны они в слишком резкой форме.