Перейти к содержимому

TatyanaV

Регистрация: 18 июл 2012
Offline Активность: 29 окт 2019 09:23
*****

#167105 Как открыть ссылку в новой вкладке

Написано TatyanaV 12 июля 2018 - 07:42

 

Теоретически, Ctrl+T не только открывает новую вкладку в хроме, но и автоматом на неё переключается.

Т.е. можно попробовать сохранить windowHandle основного окна (чтобы потом вернуться к нему), нажать Ctrl+T и без переключения на новую вкладку (в коде) попробовать сразу перейти на нужную страницу.

Я не пробовала так, не знаю, сработает ли.

 

п.с.: попробуйте ArrayList<String> tabs = (ArrayList<String>) webDriver.getWindowHandles();

Вот я просто ввел эту строку и уже сразу ошибка (java: incompatible types: java.util.Set<java.lang.String> cannot be converted to java.util.ArrayList<com.sun.org.apache.xpath.internal.operations.String>) как ее убрать?

 

 

Ок, тогда просто Set<String> tabs webDriver.getWindowHandles();

getWindowHandles() возвращает Set<String>, поэтому проблем быть не должно (у меня в моем коде сделано именно через Set<String>. Тогда для переключения - надо сначала сохранить handle "текущего" окна, а потом удалить его из полученного Set'а (в нём останется только одно новое окно).


  • 1


#166386 Page object model, Maven и еще пару вопросов

Написано TatyanaV 30 мая 2018 - 07:37

Ссылок, к сожалению, нет.

 

Условный пример (это не полноценный PageManager).

public class PageManagerLite {
    private static WebDriver driver;
    private static WebDriverWait howLong;

    private StartPage startPage;
    private LoginPage loginPage;
    

    public class PageManagerLite(WebDriver driver, howLong) {
        this.driver = driver;
        this.howLong = howLong;
    }

    private StartPage startPage() {
        // создаем и запоминаем страницу, если она ещё не создавалась
        startPage = startPage == null ? new StartPage(driver, howLong) : startPage;
        return startPage;
    }

    private LoginPage loginPage() {
        // создаем и запоминаем страницу, если она ещё не создавалась
        loginPage = loginPage == null ? new LoginPage (driver, howLong) : loginPage;
        return loginPage;
    }
}

// в методе postLinkClick
public LoginPage postLinkClick() {
    // что-то делается
    return pages.loginPage(); // для этого нужно, чтобы страницы знали про PageManager, т.е. при их создании надо и на него ссылку им передавать
}

// В классе тестов

private PageManagerLite pages;

public void init() {
    pages = new PageManagerLite(driver, howLong);
}

public void Method1(){
    driver.get("https://www.ukr.net/");
    pages.startPage().postLinkClick();
    pages.loginPage().setLogin("UserName");
}

  • 1


#166385 Автоматизация больших бизнес процессов

Написано TatyanaV 30 мая 2018 - 07:15

1. Селениум - это библиотека, позволяющая эмулировать Ваши действия в браузере, а testNG - делает из Ваших методов "тесты". Но если абстрагироваться от этого, Ваш код это просто обычный код на выбранном Вами ЯП (в данном случае Java) со всеми вытекающими из этого возможностями. 

Поэтому на Ваш первый вопрос, ответ - да, Вы можете создать объект другого класса и использовать его методы.

Или можете сделать их статичными и использовать их без создания объекта.

 

2. Не претендую на то, что мой подход самый-самый правильный. но в моём понимании, в xml'ке должны быть только такие тесты, порядок выполнения которых не принципиален. 

А по поводу if'а - если Ваша цель проверить две разные ситуации - то, на мой взгляд, это все же должно быть два отдельных теста (вроде registerOrgCabinetWithApprove и registerOrgCabinetWithReject) . Даже если они во многом похожи - похожую часть можно в отдельный метод вынести (это же Java, почему нет?).


  • 2


#166377 Page object model, Maven и еще пару вопросов

Написано TatyanaV 29 мая 2018 - 16:33

Последний вариант. Создаете объект страницы и сохраняете в него то, что вернет startPage.postLinkClick().

 

Альтернативный вариант - сами объекты страницы - статичные объекты какого-нибудь отдельного класса. Тогда postLinkClick будет менять соответствующий статичный объект и его же и возвращать.

Тогда в самом тесте - просто обращаетесь сразу к объектам соответствующих страниц.

Но это костыль, лучше уж сделать полноценный PageManager и взаимодействовать со страницами через него.


  • 1


#166376 Автоматизация больших бизнес процессов

Написано TatyanaV 29 мая 2018 - 16:24

createOrgTest() - это уже отдельный метод. Сейчас он у вас запускается один раз, первым приоритетом.

Можно просто убрать аннотацию @Test и поставить вместо неё @BeforeMethod. Тогда перед выполнением каждого теста в этом классе - будет вызываться createOrgTest() и делать вам "первый шаг БП".

Если тесты, которым нужен этот шаг - в разных классах, то просто вызывайте в коде тех тестов первой строкой метод createOrgTest() (в этом случае аннотация @BeforeMethod уже не требуется, можно оставить @Test для отдельной проверки этого процесса). 


  • 1


#165590 Selenium и logout

Написано TatyanaV 06 апреля 2018 - 08:32

Если Вы решили вопрос - пожалуйста, НИКОГДА не пишите "Все решил,извините за засорение форума.". Ваш вопрос спустя какое-то время может нагуглить кто-то с аналогичной проблемой. Ваше "все решил" этому "кому-то" никак не поможет, лишь потратит время на изучение неинформативной темы. 


  • 1


#165304 selenium + junit выпадающий список

Написано TatyanaV 19 марта 2018 - 08:05

Если под "методом селекта" Вы подразумеваете селениумовский Select - то он тут не применим, т.к. работает только с элементами с тэгом select. А у Вас судя по коду - выпадающий список сделан не стандартным селектом, а самодельной конструкцией других элементов (дивы, спаны).

Вариант - делать так, как Вы это делаете вручную. Т.е. кликнуть (либо по полю в целом, либо по стрелочке, если она была бы отдельным элементом), дождаться, пока пункты списка появятся (т.е. - спаны с пунктами списка станут не disabled, лучше подождать кликабельности), кликнуть по нужному пункту.


  • 1


#165278 не работают прокси

Написано TatyanaV 16 марта 2018 - 06:25

Вопрос решил сам

Через год-другой кто-то начнет искать решение подобной проблемы, наткнется на Вашу тему, и Ваше "вопрос решил сам" безусловно этому человеку очень поможет...


  • 2


#165040 Как поучить стоки в таблице

Написано TatyanaV 27 февраля 2018 - 06:54

А с чего бы ему тут разные строки находить?

Вы смотрите кол-во элементов tr, а потом без какой либо связи с ними - просто выводите Х раз переменную Sot, которую ищите всегда одинаково. С чего бы ему вдруг ни с того, ни с сего по одному и тому же локатору разные элементы находить? Страница то та же самая, DOM тот же самый, поиск тот же самый.


  • 1


#164798 Создание базы и подключения Селенуима к базе

Написано TatyanaV 13 февраля 2018 - 10:32

Селениуму Вы просто говорите "введи вот такие значения вот в такие поля", откуда Вы эти значения берете (из БД, из файлика, фиксированные зашитые в скрипте и т.п. - уже совсем другой вопрос).

Т.е. это относится к возможностям того ЯП, который Вы используете, а не непосредственно к Селениуму.

 

Как вариант, если бы у вас был доступ к БД Вашего проекта - можно было бы не менять аккаунты, а просто "отменять" их регистрацию (например, заменять в БД использованный емейл/логин/аккаунт на что-то другое, чтобы аккаунт считался ещё не использованным).


  • 2


#164340 Не находится поле для ввода текста в аналоге Selenium IDE (Katalon)

Написано TatyanaV 11 января 2018 - 11:04

 

Я достаточно хорошо знаю джаву и не один год пишу тесты на селениуме + джава.


у меня создание тестов на селениуме уже почти до автоматизма доведено и проблем нет вообще

 

 При всем уважении - у вас в профиле бейдж "Участник тренинга Селениум 2.0 стартовый уровень", который вы получили 14 февраля 2017 года. И это чувствуется.

 

Открою небольшой секрет - чтобы изучать селениум совершенно необязательно иметь бейдж в профиле. :)

 

Ещё один секрет - далеко не все начинают учить только когда приходят на соответствующий курс. Есть такая вещь как самообразование, полезная штука, попробуйте как-нибудь.

 

Бонус: 14.02.2017 - бейдж у пользователя "Tatyana_V", у меня ник без нижнего подчеркивания (внимательность - вообще-то достаточно важна для тестировщика). Мой бейдж получен 07.03.2014 (если Вам это настолько критично), а непосредственно изучение начато ещё раньше.

 

И да, продвинутый курс я на сайте не проходила, т.к. а) зная джаву - разобраться с библиотекой селениума вполне можно и самостоятельно, что-то не ясно - открываете исходники и смотрите, б) для более углублённого изучения / ознакомления - Алексей приезжал к нам в компанию и делал тренинг непосредственно у нас, сразу для группы сотрудников.

Так что не стоит судить по картинке в профиле о том, о чем Вы абсолютно ничего не знаете, это выглядит смешно. :)

 

п.с.: если судить по Вашим бейджикам - то Вы о селениуме вообще даже и не слышали. :)


  • 3


#164336 Не находится поле для ввода текста в аналоге Selenium IDE (Katalon)

Написано TatyanaV 11 января 2018 - 09:54

Я достаточно хорошо знаю джаву и не один год пишу тесты на селениуме + джава.

Из всего, что я за это время видела - Каталон самый простой в плане вхождения для людей без опыта.

На мой взгляд, удобен он не "только тем, что есть графический интерфейс", но и возможностью полноценно использовать ЯП.

Кроме того, он кучу вещей делает сам, без необходимости лишнего геммороя, что важно для тех, кто с программированием не дружит.

Мне на нём приходится делать гораздо меньше ожиданий (т.к. многое он и сам и так уже делает), проще делать скриншоты, подключать файлы с тестовыми данными, если требуется.

Плюс написание теста на нем (даже с полноценным использованием вкладки "Script" идёт все равно быстрее, чем на чистом селениуме (и это при том, что у меня создание тестов на селениуме уже почти до автоматизма доведено и проблем нет вообще).

Один из важных плюсов - он хорошо дружит с фреймами, чего нет, к сожалению, в чистом селениуме (в Каталоне не нужно вручную прописывать переключения между фреймами и т.п.). В некоторых приложениях это важно.

Плюс, Каталон по сути основан на селениуме, что позволяет использовать все его возможности. 

 

Да, Каталон далек от совершенства. Но если уж и сравнивать его с транспортом - это скорее беговел в сравнении с велосипедом. Педали крутить ещё не нужно, но учиться держать равновесие уже приходится.


  • 1


#164330 Не находится поле для ввода текста в аналоге Selenium IDE (Katalon)

Написано TatyanaV 11 января 2018 - 08:44

 

В логе выдало:

Found 27 web elements with id: 'Object Repository/Page_ (1)/Page_/input_ui-autocomplete-input' located by 'By.xpath: //input[count(. | //*[@type = 'text']) = count(//*[@type = 'text'])]' in '30' second(s)

Unable to set text 'тест' of object 'Object Repository/Page_ (3)/input_ui-autocomplete-input' (Root cause: 

 

1. Попробуйте в консоли хрома подобрать такой локатор, чтобы он однозначно определял нужный Вам элемент. Совсем идеально - договориться с разработчиками об айдишниках.

Как вариант: //*[@id='searchInput_chosen']/div/div/input или //*[@id='searchInput_chosen']//input (если в диве с айди searchInput_chosen других инпутов нет). Просто подставьте локатор в параметр xpath в свойствах этого объекта (в Object Repository)

 

2. Попробуйте заменить waitForElementPresent на waitForElementClickable. waitForElementPresent по-моему вообще одно из самых бесполезных ожиданий.

 

3. Прямо при записи скрипта, периодически нажимайте на паузу и проверяйте элементы, которые Каталон нашел. Verify and highlight > 1 элемента => прям тут же подбирайте локатор, пока не будет 1 единственный элемент находить.

 

Для начинающего автотестера без опыта разработки на каком-нибудь ЯП - Каталон гораздо более удобный вариант, чем Selenide (лично мне отсутствие документации по нему показалось минусом, а не плюсом, как это тогда позиционировалось... может изменилось конечно с тех пор).

А неправильно выбранный локатор - помешает не только в Каталоне, но и в чистом селениуме.


  • 1


#163846 Поиск элемента с помощью xpath

Написано TatyanaV 05 декабря 2017 - 06:42

Судя по вашему скриншоту, текст того дива не равен "Добавить кредит", он равен " Добавить кредит" (там по скрину - как минимум один пробел в начале). А Вы то ищете точное соответствие: text()='Добавить кредит', вот и не находит.

 

Если уж очень хочется именно так поискать, попробуйте //div[contains(text(),'Добавить кредит')]

 

//<элемент>[contains(<аттрибут>=<значение>)] => у элемента есть аттрибут равный указанному значению

//<элемент>[contains(<аттрибут>,<значение>)] => у элемента есть аттрибут, в значении которого содержится указанное значение


  • 1


#163718 Page Object и одинаковые локаторы

Написано TatyanaV 28 ноября 2017 - 08:11

 

можно общие части выделять в отдельные объекты и потом в пейдж-обжектах наследовать

А могли бы пример привести?

Я занимался тестированием веб-приложений при помощи Selenium Webdriver, но использовал Page Object с разметкой элементов при помощи аннотаций

 

 

А причем тут аннотации? Они наследованию никак не мешают.

Делаете какую-нибудь абстрактную (в прямом смысле) заготовку с теми элементами, которые на всех тестируемых страницах присутствуют. В этом классе - все нужные элементы (с аннотация или нет, как уж вам удобнее).

Далее, каждая отдельная тестовая страница - просто наследуется от этого абстрактного класса, а в ней самой - описываются только уникальные для неё элементы. 

public abstract class AnyPage {

    @FindBy(css = "#mainFilter")
    WebElement mainFilter;

    public Page doSmthWithMainFilter(String someValue) {
        // do something
        return this;
    }
}

public class StatsPage extends AnyPage {

    @FindBy(css = "#specificFilter")
    WebElement specificFilter;

    public StatsPage doSmthWithSpecificFilter(String someValue) {
        // do something 
        return this;
    }
}


public class AnotherStatsPage extends AnyPage {

    @FindBy(css = "#anotherSpecificFilter")
    WebElement anotherSpecificFilter;

    public AnotherStatsPage doSmthWithAnotherSpecificFilter(String someValue) {
        // do something 
        return this;
    }
}

  • 1