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

Публикации TatyanaV

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



#171579 ImplicitWait не ждет больше 60 сек

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

Одновременное использование явных и неявных ожиданий в принципе не рекомендуется.

наоборот, рекомендуется в случае разных "сложных" элементов, когда элементы кастомные или с фреймворков типа реакта, или когда лэйзи лоадинг применяется

 

https://www.selenium...er_advanced.jsp

WARNING: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. For example setting an implicit wait of 10 seconds and an explicit wait of 15 seconds, could cause a timeout to occur after 20 seconds.




#171574 ImplicitWait не ждет больше 60 сек

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

Одновременное использование явных и неявных ожиданий в принципе не рекомендуется.




#171632 java selenium яндекс карты

Отправлено автор: TatyanaV 09 апреля 2019 - 05:57 в Автоматизированное тестирование

Мне показалось, что автору нужно проверить отработку СВОЕГО функционала после клика по маркеру на карте.

С чего Вы все взяли, что он сами карты тестировать собрался?




#171513 Jenkins не запускает эмулятор

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

...

dsound: Could not set cooperative level for window 0000000000000000
dsound: Reason: An invalid parameter was passed to the returning function
audio: Could not init `dsound' audio driver
emulator: WARNING: Requested adb port (5763) is outside the recommended range [5555,5586]. ADB may not function properly for the emulator. See -help-port for details.
...
emulator: WARNING: Not saving state: RAM not mapped as shared
...
$ D:\Android\Sdk/platform-tools/adb.exe kill-server

Я бы копала в эту сторону.




#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();
    }
    });
 
п.с.: я протрактор не знаю, промисы погуглила, код выше - по сути из того же гугла.



#171087 Protractor. Click if exists

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

Тот кусочек кода делает не совсем то, что озвучил автор темы.

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

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




#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 тут не требуется.




#171051 Protractor. Click if exists

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

А так? (вариация на тему первого моего варианта)

 

element.all(by.css(<локатор первой кнопки>))).count().then(function(count) {
   if (count > 0) {

      element(by.css(<локатор>)).click();

   } else element(by.css(<локатор второй кнопки>)).click();

});

 

Сорри за флуд, просто самой интересно, как же в протракторе решается эта ситуация.




#174014 Python + Selenium + Press Keyboard(Enter)

Отправлено автор: TatyanaV 15 октября 2019 - 08:22 в Автоматизированное тестирование

Может что-то вроде driver.switch_to.alert.accept() ?




#171865 xpath. Переход по дочерней ссылке

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

Возможно, если бы было понятнее в чем именно проблема, ответов было бы больше.

 

В начале Вы одним способом скобки указали, ниже в "равенстве" уже другим.

Фраза "в тегах "a" ищутся атрибуты data-analytics-placement" - неправильная сама по себе, т.к. локатор предполагает не поиск аттрибутов в тэгах, а поиск элементов (тэгов) с указанными значениями аттрибутов. Это не одно и тоже.

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

В результате, лично у меня после первого сообщения получилась какая-то непонятная каша в голове. 

 

Ваше "//a[@data-analytics-placement][3]  =  xpath=(//a[@data-analytics-placement][3])" - ещё больше сбило с толку, т.к. стало не ясно, что же не так то тогда, "равенство" на первый взгляд выглядит адекватным.

 

Про "прямо подряд" - добавило к непонятности. Бывает "непрямо подряд"? 

Не понятно, что значит "4 по порядку атрибут с тегом". Это так не работает. У аттрибутов нет тэгов.

 

 

 

Я нашла ответ на свой вопрос, спасибо за АКТИВНОЕ участие в обсуждении.

 

Пожалуйста.




#172720 Автоматизация Selenide + TestNG

Отправлено автор: TatyanaV 26 июня 2019 - 05:39 в Автоматизированное тестирование

Я Selenide плохо знаю, конечно, но я не вижу в этом коде никаких намеков на инициализацию браузера. Может я просто не понимаю чего-то?

Где у Вас браузер инициализируется?




#172714 Автоматизация Selenide + TestNG

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

Сложно сказать без кода, особенно - того места, где Вы браузер инициализируете.

Проблема не в xml - а в самом коде. 

Вы пытаетесь запустить свои тесты в три потока, но браузер, судя по ошибке, объявляете так, что тесты его только в одном потоке видят.




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

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

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

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

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




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

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

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

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




#171744 Выбор даты из календаря средствами Selenium IDE

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

css: [id*='day']:not([class='disabled'])

 

п.с.: *= - означает "содержит".




#171822 Выбор даты из календаря средствами Selenium IDE

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

А Вас слово "not" не смущает? :) 
 
[id*='day']:not([class='disabled']) = элемент, в айдишнике которого присутствует "day", и у которого НЕТ класса "disabled".

 

Соответственно, варианты, которые Вы пробовали:

css=#day:not([class*="disabled"]):not([class*="today"]) = элемент, айдишник которого = "day" (у Вас вроде бы не было таких элементов), и у которого НЕТ класса "disabled" и НЕТ класса "today".

css=[id*="day"]:not([class*="disabled"]):not([class*="today"]) = элемент, в айдишнике которого присутствует "day", и у которого НЕТ класса "disabled" и НЕТ класса "today".

 

#cal td.today = где-то ниже по DOM'у относительно элемента с id = "cal", найти элемент td, у которого ЕСТЬ класс "today".

 

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

 

Теоретически, [id*="day"]:not([class*="disabled"]):not([class*="today"])  должно было отработать и кликнуть по "вчера" (если по скрину с кодом смотреть). Возможно, пытается кликнуть до того, как календарь "откроется". 

verify element present смотрит лишь на наличие элемента в DOM'e. Видно его или нет, можно ли по нему кликнуть и т.д. - не проверяется.

Попробуйте дожидаться не наличия элемента (verify element present), а его кликабельности (element clickable - не знаю, как оно в IDE пишется).

 

п.с.: [id*="day"].today:not([class*="disabled"]) = элемент, айдишник которого содержит "day", и у которого ЕСТЬ класс "today" и НЕТ класса "disabled".




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

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

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

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

 

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

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

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

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

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




#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.




#171465 Как нажимать автоматизированно нажимать "Да" при запросе разре

Отправлено автор: TatyanaV 29 марта 2019 - 09:23 в Selenium - Functional Testing

Есть вероятность, что скрипт падает на "нет такого окна" до того, как оно успевает возникнуть. 

 

(new WebDriverWait(browser, <timeOutInSeconds>)).until(ExpectedConditions.alertIsPresent()).accept();




#171458 Как нажимать автоматизированно нажимать "Да" при запросе разре

Отправлено автор: TatyanaV 29 марта 2019 - 07:22 в Selenium - Functional Testing

driver.switchTo().alert().accept();




#171486 Как нажимать автоматизированно нажимать "Да" при запросе разре

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

Как вариант - попробовать поставить Каталон (скачать и распаковать, он бесплатен) и автоматизировать в нём эту часть.

Не с целью ВСЁ туда перенести, а просто для того, чтобы подсмотреть, как такие окна находит Каталон (и находит ли).




#171470 Как нажимать автоматизированно нажимать "Да" при запросе разре

Отправлено автор: TatyanaV 29 марта 2019 - 12:51 в Selenium - Functional Testing

У меня был пример - из моего кода (с небольшими изменениями), а не из "примеров в сети".

Видимо там какое-то специфическое окно. Тогда, наверное, действительно - проще добавить сайт в доверенные.

С другой стороны - может быть у Вас и дальше в софте такие же окна будут? 

Тогда все же придется искать способы с ними работать.




#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 в Автоматизированное тестирование

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