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

Публикации TatyanaV

72 публикаций создано TatyanaV (учитываются публикации только с 28 апреля 2023)



#171047 Protractor. Click if exists

Отправлено автор: TatyanaV 26 февраля 2019 - 07:30 в Selenium - Functional Testing

А если так?
 
var someButton =  element(by.css(<локатор>));
someButton.isPresent().then(function(result) {
    if ( result ) {
        someButton.click();
    } else {
        element(by.css(<локатор другой кнопки>)).click();
    }
    });
 
п.с.: я протрактор не знаю, промисы погуглила, код выше - по сути из того же гугла.



#171033 Protractor. Click if exists

Отправлено автор: TatyanaV 25 февраля 2019 - 13:35 в Selenium - Functional Testing

Альтернативный вариант:

if (driver.findElements(<локатор первого элемента>).size() > 0) {

     <какие-нибудь ожидания, если нужно>

     driver.findElement(<локатор первого элемента>).click();

} else driver.findElement(<локатор второго элемента>).click();

 

п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.




#170901 Добавить в цикл переменну и это значение в sendkeys

Отправлено автор: TatyanaV 14 февраля 2019 - 09:59 в Selenium - Functional Testing

На текстовое значение длиной -1 я бы посмотрела. :)
 
for (int storedVal = 0; storedVal < 9; storedVal++)
System.out.println(storedVal);
 
Это означает: начиная со значения storedVal  = 0 и пока storedVal < 9 - выполнять System.out.println(storedVal), после каждого прохода увеличивать значение переменной (storedVal++).

При этом storedVal - локальная переменная этого цикла, вне for'а её не существует, поэтому sendKeys знать не знает, что это и откуда это взять.

 

Соответственно, из первого поста:

 

for (int storedVal = 0; storedVal < 3; storedVal++)
String storedVal = RandomStringUtils.random(10, 0, 9, false, true, "1234578752".toCharArray());
System.out.println(storedVal);

 

Почти тоже самое, только ещё кривее. Вы говорите, что у Вас есть переменная storedVal типа int, по которой идёт цикл (см.выше), но в самом цикле говорите, что нужна еще одна переменная с тем же названием storedVal, но типом String (это в принципе неправильно). Если измените название переменной - тоже получится ерунда. Просто x раз (в  данном случае - 3 раза) будет заново генерироваться рандомная строка. Зачем? Чем Вас не устраивает то, что сгенерировалось в первый раз?

 

Если хотите как-то использовать переменную вне цикла (в sendKeys, например), то её надо объявить ДО цикла, в цикле (в теле цикла) её изменить, после цикла - использовать. При этом для самого цикла будет другая переменная.

Например:

String storedVal = "";

for (int i= 0; i < 3; i++) {
       <тут как-то меняете значние storedVal>

}
System.out.println(storedVal);

 

Зачем Вам тут в принципе циклы, если Вы сразу всю строку радомную генерите - не понимаю.

 

п.с.: локаторы - тихий ужас.

п.п.с: значение второго куска кода во втором сообщении - вообще вне моего понимания, смотрится как просто бессмысленный набор команд, без какой либо логики и взаимосвязи. 

п.п.п.с: я бы на Вашем месте не стала мешать всё в одну кучу - сначала надо изучить хотя бы основы Java, а уже потом добавлять Selenium. Потому что в том, что Вы привели - селениума нет по сути, все проблемы именно из-за незнания ЯП.




#170831 Запуск Chromium при помощи Selenium

Отправлено автор: TatyanaV 07 февраля 2019 - 08:59 в Selenium - Functional Testing

FYI: Путь к драйверу можно вообще нигде не указывать, если папка, в которой он лежит, указан в переменной Path.




#170741 Выбор языка для автоматизации тестов

Отправлено автор: TatyanaV 01 февраля 2019 - 06:38 в Selenium - Functional Testing

Насколько критичный вопрос выбора языка для автоматизации тестов?
Есть ли какие-то советы, в какой ситуации стоит выбрать именно этот, а не другой язык? Может быть, в определенных областях требуются конкретные языки?

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

 

Тяжело ли перейти к другому языку, если научишься на одном?

Тяжело ли перейти к китайскому, если Вы уже научились немецкому?
Это вопрос индивидуальный.
В моём представлении - это зависит в первую очередь от Вас (кому-то легко зная один ЯП, быстрее выучить другой, кому-то сложно), от того, насколько эти ЯПы похожи и т.д.
Если речь об изменении ЯПа автотестов - я бы не стала мешать в одну кучу и (при желании сменить ЯП) начала бы отдельный проект на новом ЯП, постепенно переводя на него существующие тесты. Тут мне кажется, главный вопрос - зачем Вам это нужно? Просто, чтобы язык поменять? Или есть другие причины?
 
 

Есть ли разница, на каком языке писать тесты, ведь язык тестов и самого приложения никак не взаимосвязаны?
почему в требованиях часто указывают конкретный язык, который хотят от автоматизатора?
 
Почему не распространен язык JavaScript для автоматизации? На мой взгляд, прекрасный выбор. Фреймворки для него почему-то есть, а отдельного течения (как и курса на портале) нет, с чем это связано?

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

И / или уже есть автоматизатор, хотят, чтобы была возможность взаимодействия / совместной работы / передачи опыта и т.п.




#170656 Как узнать если объект на страничке, для определения дальнейших действ

Отправлено автор: TatyanaV 28 января 2019 - 11:28 в Selenium - Functional Testing

Да, тут похоже, без текста никак. (поиски в стиле button[2] в расчет не беру).

 

Если есть возможность - можно попросить разработчиков добавить айдишники к элементам, с которыми пользователь может взаимодействовать (поля / кнопки и т.п.).

Не только из-за стабильности (и лаконичности) локаторов, но и в целях удобства дальнейшей автоматизации (если есть id - Вы и не будете тратить время и другие локаторы искать).




#170647 Бизнес/технические вопросы по Автоматизированному тестированию

Отправлено автор: TatyanaV 28 января 2019 - 06:29 в Автоматизированное тестирование

Автоматизация - это та же разработка.

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




#170613 Как узнать если объект на страничке, для определения дальнейших действ

Отправлено автор: TatyanaV 25 января 2019 - 06:07 в Selenium - Functional Testing

 

3) если нет, остается xpath, пишем, опираясь на атрибуты элемента (класс, ссылка... НЕ текст, не title и т.п.)

 

не понимаю почему все так боятся текста, часто ли у вас менялся текст на кнопках или ссылках? Привязка к тексту вполне оправдана, кнопка Сохранить так и останется Сохранить, даже при смене верстки, классов и так далее.

Кнопка "Сохранить" может внезапно стать кнопкой "Save", если в Вашем приложении есть возможность смены языков.

При локаторах по тексту - придётся под каждый язык свою версию локатора делать.

При локаторах по айдишникам, к примеру, условная кнопка #saveBtn - таковой и останется вне зависимости от выбранного языка.




#170590 Автотесты без программирования.

Отправлено автор: TatyanaV 23 января 2019 - 13:50 в Автоматизированное тестирование

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

- Зачем создавать велосипед?

Если это велосипед, который никому не нужен, почему куча людей продолжают ездить используя машины / мотоциклы /поезда и т.д.?




#170557 Как узнать если объект на страничке, для определения дальнейших действ

Отправлено автор: TatyanaV 22 января 2019 - 10:22 в Selenium - Functional Testing

Ну, Вы ему писали выше про css - может решил начать с освоения xpath'а.




#170546 Как узнать если объект на страничке, для определения дальнейших действ

Отправлено автор: TatyanaV 21 января 2019 - 13:35 в Selenium - Functional Testing

Кода Ваших страниц тут нет, чтобы сказать, нет ли там возможности не искать по тексту (как + Create New и Next >), но вообще - выглядит гораздо лучше. Фиксированные айдишники - вообще идеальный вариант.




#170504 Как узнать если объект на страничке, для определения дальнейших действ

Отправлено автор: TatyanaV 18 января 2019 - 12:08 в Selenium - Functional Testing

Два варианта:
1. findElementне падает с эксепшеном, даже если элементы с таким локатором не найдены - просто возвращает пустой список. Соответственно:
ArrayList<WebElement> selectUserOwners = driver.findElements(By.xpath("/html/body/div[6]/div[2]/div/form/div[1]/table/tbody/tr/td[2]/div[2]/div/div[4]/div/div/div[2]/a"));
if (selectUserOwners.size() > 0selectUserOwners.get(0).click();
 
2. Обернуть оба "элемента" в try { <поиск элемента и клик> } catch (NoSuchElementException e) {}

 

п.с.: локаторы - адские просто. Максимально нестабильные из всех, которые только могут придти в голову :).

п.п.с: если списки влияют друг на друга (выбираете значение в одном - обновляются значения в другом) - то надо бы добавить ожидания (ExpectedConditions).




#170477 Как переключиться во фрейм — switchTo().frame?

Отправлено автор: TatyanaV 17 января 2019 - 13:14 в Автоматизированное тестирование

wd.switchTo().defaultContent().switchTo.frame("fssarmiframe") - не помогает?

Насколько я понимаю, у Вас падает уже на следующем шаге, само переключение проходит.

 

С каким конкретно эксепшеном падает скрипт и как Вы определили, что локатор верный?

Учитывая, что у вас там цифры в айдишниках - то, что его Каталон в таком виде нашел ещё не гарантирует, что этот локатор 100% верный (цифры теоретически могут поменяться + Вы ссылаетесь на //div[3], а структура также могла поменяться и тогда Ваш элемент уже не div[3], а div[4], к примеру).

 

Есть ли у Вас контакт с разработчиками? При таком ужасе с атрибутами элементов (с точки зрения автоматизации, не разработки) - чаще всего лучше попытаться договориться с разработчиками о создании фиксированных айдишников на нужных Вам элементах.

 

У Вас есть на пунктах атрибут "data-recordid" - эти айдишники рандомные или соответствуют Вашей БД? 

К примеру, в кусочке кода дерева есть элемент с айдишником ext-element-88. Если data-recordid не рандомное, а фиксированное - его можно было бы найти как "[data-recordid=43] .x-treelist-item-wrap" (ну или "//*[@data-recordid=43]//*[@class='x-treelist-item-wrap']".

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

Повторюсь - это все только в том случае, если data-recordid - это неизменяемый айдишник (к примеру, записи в БД).

 

п.с.: а вообще, всегда остается вариант с дебаггом. Доходите до поставленного Вами брейкпоинта, нажимаете в браузере ф12 и пробуете найти элемент по указанному локатору - есть ли но на самом деле или нет.




#170446 Как переключиться во фрейм — switchTo().frame?

Отправлено автор: TatyanaV 17 января 2019 - 07:36 в Автоматизированное тестирование

У Вас на скрине - только элемент, который Вы хотите кликнуть, плюс скриншот тэга со скриптом, а как выглядит тэг самого фрейма?




#170112 Присвоение элементу нужных координат

Отправлено автор: TatyanaV 17 декабря 2018 - 05:29 в Автоматизированное тестирование

У меня с экзекутором вечная беда. Добавил: ((JavascriptExecutor) driver).executeScript("window.scrollTo("+ (element.getLocation().x + 1) + ", " + (element.getLocation().y + 300) + ")");

но элементы не реагируют. 

А как они должны реагировать, по-Вашему?

Это скролл (чтобы Вы могли проскроллить так, как Вам нужно, если не устраивает стандартный скролл, который селениум сам делает.). Это не перенос элементов куда либо. 

Перенос элементов - вообще сомнительная идея. 




#170100 Присвоение элементу нужных координат

Отправлено автор: TatyanaV 14 декабря 2018 - 13:56 в Автоматизированное тестирование

((JavascriptExecutor) driver).executeScript("window.scrollTo("+ element.getLocation().x + ", "+ element.getLocation().y + ")");

Ну и дальше уже регулируйте x / y, как Вам нужно.

 

Например: 

((JavascriptExecutor) driver).executeScript("window.scrollTo("+ (element.getLocation().x + 20) + ", " + (element.getLocation().y + 30) ")");




#170098 Присвоение элементу нужных координат

Отправлено автор: TatyanaV 14 декабря 2018 - 13:38 в Автоматизированное тестирование

Возможно, через JavascriptExecutor. 

В принципе, селениум и так "скроллит" до элементов, которые планирует кликать / заполнять.




#169941 тест выполнился,но в консоле тест файлед

Отправлено автор: TatyanaV 07 декабря 2018 - 10:24 в Автоматизированное тестирование

с помощью math.random() подставляю данные до максимальной длины символов

 

Вот это - просто гениально! 

 

Простите, не удержалась.




#169940 Пропадают введенные данные в поле типа Дата после сохранения формы

Отправлено автор: TatyanaV 07 декабря 2018 - 10:21 в Автоматизированное тестирование

Что делать?

Разбираться.

Я бы посмотрела, что будет, если вручную ввести тоже самое. Может быть это само приложение считает дату некорректной и сбрасывает её?

В любом случае, дебаг никто не отменял. Поставьте брейкпоинты и по-шагово пройдите тест свой - найдёте, на каком конкретном шаге дата пропадает.




#169928 Переключение на окно подтверждения действия

Отправлено автор: TatyanaV 06 декабря 2018 - 08:48 в Selenium - Functional Testing

driver.switchTo().alert().accept() пробовали?




#169081 Что такое чек-лист?

Отправлено автор: TatyanaV 23 октября 2018 - 05:25 в Начинающему тестировщику

Да, моя ошибка. Но и [swiːt] - это не "свит", а скорее "суит". "в" там все же в любом случае нет, разве что с сильнейшим русским акцентов если.




#169073 Что такое чек-лист?

Отправлено автор: TatyanaV 22 октября 2018 - 09:45 в Начинающему тестировщику

Test-suite читается как тест свит

Серьезно? По-моему, suite скорее ближе к чему-то среднему между "сут" и "сют" (с коротким звуком похожим на наше "у", вероятно поэтому у нас его и трансформировали в "сьют"), звука "в" там и близко нет.