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

Alex

Регистрация: 31 июл 2007
Offline Активность: 06 дек 2022 10:25
***--

#158211 JMeter и http ответ с кодом 400

Написано Alex 08 февраля 2017 - 07:25

Всем привет.

Помогите решить проблему с 400-й ошибкой. Однако ситуация не совсем такая, как у создателя топика. При прохождении сценария, некоторые ответы сервера содержат

Response code: 400

Response message: Bad request

 

При этом, когда отправляю эти же запросы через Fiddler, получаю 200 ОК. Беру с него все данные вставляю в Jmeter опять 400 error.

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

Как правило, это заголовки, cookie (чего-то тут не хватает или не то значение)


  • 1


#147593 Default downloads location for Internet Explorer 11

Написано Alex 06 января 2016 - 08:43

Привет!

 

Подскажите, пожалуйста, как в IE (в частности, 11) выставить default downloads location при старте нового инстанса ие драйвера?

 

Была мысль, что может стоит смотреть в сторону InternetExplorerOptions и там выставить нужный capability, но наткнулся на это (http://stackoverflow...nload-directory) и стало совсем грустно.

 

Ребята, кто решил данную проблему... ниид хелп! Может есть какие обходные пути или хоть какое решение данной проблемы?

 

 

Всем заранее спасибо за ответы.

p.s. Извиняюсь, если была такая тема.. не нашел :(

В принципе по ссылке все написано. Из selenium никак не сделать. Конфигурировать предварительно руками. Альтернатива - добраться до COM (если он это позволяет) или через реестр, например (опять же, если позволяет), изменить настройки IE. Но в силу отсутствия профиля настройки будут изменяться для всех пользователей (т.е., если не откатить, то настройки сохранятся)


  • 1


#140427 Получение полного пути к объекту

Написано Alex 07 апреля 2015 - 06:02

Коллеги, доброго времени суток.

 

Не подскажете, можно ли в QTP|UFT как-то получить полный путь к объекту в виде строки?

 

 

Например, для объекта Window("MyWin").EditBox("MyEditBox") это будет строка "Window("MyWin").EditBox("MyEditBox")".

В TestComplete это делается очень просто: вызовом метода Name или FullName (уже точно не помню, каким именно, почти два года не пользовался TC) самого объекта. В объектах QTP я ничего подобного не нашел. 

 

Буду благодарен любым советам.

Решения из коробки нет...

То ли на этом форуме, то ли advancedqtp как-то выкладывал функцию для решения этой задачи... так, с QTP давно не работал, точно не вспомню, на чем именно было основано решение. Если память не изменяет, то на использовании свойств Name, micClass, Parent. За счет рекурсивного обхода родителей можно построить эту строку.


  • 1


#139314 Как в отчет вывести параметры запуска метода от dataprovider

Написано Alex 19 февраля 2015 - 06:13

Allure не вариант. Нужно совсем просто, чтобы после теста в логе выпадали результаты подобно

FAILED: test_1 on [Test_1 passed=0 failed=0 skipped=0]("login1 pass1 type1")

FAILED: test_2 on [Test_2 passed=0 failed=0 skipped=0]("login2 pass2 type2")

 

В afterMethod маловероятно. Но в beforeMethod можно объявить входной параметр Objec[], в который TestNG передаст собственно параметры выполнения. Далее просто сохранить их в поле класса, ну а в afterMethod уже считать


  • 1


#139228 parallel dataprovider Открываются браузеры,но задействован только один

Написано Alex 17 февраля 2015 - 05:47

 

 

Этой информации недостаточно. Потому что непонятно, где вызывается setDriver, действительно ли это происходит в каждом потоке.

Проблема с parallel dataprovider состоит в том, что beforeMethod выполняется в одном потоке, а сам тест - в другом. Поэтому ThreadLocal, инициализированный вне метода теста будет давать NPE.

Решение: инициализировать переменные в методе теста. Или реализовывать какой-то собственный диспетчер, который будет отдавать ресурсы конкретному тесту. Это довольно трудоемко.

 

Alex, действительно проблема решилась, когда сделал первый вызов setdriver() с инициализаций браузера в первом методе вызываемом из @Test. Тесты начали стартовать правильно. Но теперь возникла другая проблема. @AfterMethod тоже не видит локальной переменной driver и не может закрыть браузер. Т.е. тест проходит, но при попытке закрыть браузер выходит NPE

 

Проблема ровно та же.

При parallel dataprovider метод теста выполняется полностью в собственном потоке. Все before и after находятся в другом потоке/потоках.

Создайте сущность а-ля WebDriverManager/WebDriverFactory, которая будет хранить Set всех инициализированных драйверов. Через shutdownhook или в afterSuite закрывайте все не закрытые браузеры из этого Set:

 

WebDriverFactory.createDriver();

WebDriverFactory.quitAll()

 

public static synchronized WebDriver createDriver();


  • 1


#139169 parallel dataprovider Открываются браузеры,но задействован только один

Написано Alex 16 февраля 2015 - 05:46

Этой информации недостаточно. Потому что непонятно, где вызывается setDriver, действительно ли это происходит в каждом потоке.

Проблема с parallel dataprovider состоит в том, что beforeMethod выполняется в одном потоке, а сам тест - в другом. Поэтому ThreadLocal, инициализированный вне метода теста будет давать NPE.

Решение: инициализировать переменные в методе теста. Или реализовывать какой-то собственный диспетчер, который будет отдавать ресурсы конкретному тесту. Это довольно трудоемко.


  • 1


#130989 Найти текст в span

Написано Alex 05 июня 2014 - 07:39

 


 

 

<ul id="c032a907-d64d-4cd4-ac93-140113189175-usersList">
    <li id="c032a907-d64d-4cd4-ac93-140113189175-user-li-Administrator" class="tree-toggle">
        <span style="font-weight: bold; color: #0972a5;">Administrator</span>
    </li>
</ul>

Никак не могу найти текст Administrator в теге span

 

Пробовал делать так:

driver.find_element_by_xpath(".//*[@class='tree-toggle']/span").text

Но ничего не возвращается(

 

Как найти текст?

 

Зачем *? Почему не напрямую //li[@class='...']? Выведите innerHtml элемента, вполне вероятно вы не на тот элемент фокусировались (getAttribute("innerHTML")). Можно перебрать через findElements, чтобы понять какому количеству элементов соответствует xpath

 

Спасибо! Получилось это сделать!

 

Теперь столкнулся с похожей проблемой, только текст расположен иначе. Как можно тут отыскать UserManager?

bel id="c04ce669-5071-414a-9b0c-140189662327-UserManager-label" class="revealTreeBrancheHeader revealTreeBrancheHeader-folder tree-toggle webPagesTop">
    <span class="revealTreeBranche glyphicon glyphicon-chevron-right objectItem" style="color: rgb(151, 185, 235);"/>
         UserManager                           
    <span class="quantity badge" style="background: none repeat scroll 0% 0% transparent; color: transparent; display: inline;">1</span>
</label>

 

 

За такую верстку по рукам бы надавать. По факту, скорее всего извлечь именно этот текст никак. Забирать нужно текст элемента label, а он захватит и текст вложенных span-ов. Можно попробовать, как вариант, скопировать этот HTML и создать свой XML/DOM фрагмент , у которого выцепить потом текст node, но не уверен, что это получится.


  • 2


#130856 Как проверить отсутствие элемента на странице?

Написано Alex 29 мая 2014 - 07:51

Добрый день.

Так как в итоге сделать чтоб скрипт не ждал, а делал эту проверку несколько секунд. 

Вопрос стоит остро, т.к. хочется проверять отсутствие большинства элементов на странице. 

boolean notExist;
        try{
            driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
            notExist = driver.findElements(by).size()<1;
        }finally{
            driver.manage().timeouts().implicitlyWait(MY_OLD_TIMEOUT, TimeUnit.SECONDS);
        }

 

return notExists;


  • 2


#130577 Ожидание отложенной загрузки страницы

Написано Alex 20 мая 2014 - 08:19

Всем доброго дня!

Подскажите, есть ли возможность явно "сказать" селениуму (WebDriver, Java), чтобы он подождал перезагрузки страницы?

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

Собственно, еще раз вопрос - можно ли "сказать" селениуму, чтобы он подождал перезагрузки страницы?

Используйте ожидание readyState или StaleReferenceElementException (сохраните ссылку на какой-то из объектов DOM и вызывайте в цикле, например, isEnabled(), пока не получите StaleReferenceElementException)


  • 1


#126851 LPSTR и русский текст

Написано Alex 11 февраля 2014 - 13:46

попробуйте создать переменную  в проекте (Project->Variables) с русскими буквами и использовать эту переменную.

если не получится, то посмотрите что у вас в настройках проекта с кодировками (Секция General-> Units enconding) и убедитесь что в системе есть русский язык :)

если и тут все нормально, то поробуйте создать файлик в ANSII кодировке с текстом и прочитайте строку с него.

если и это не поможет, то я пас, идей больше нет :)

Проблема решилась изменением объявления DLL

 

Было: Call Def_DLL.DefineProc("Process", vt_lpstr, vt_ui4, vt_lpstr, vt_int)

Стало: Call Def_DLL.DefineProc("Process", vt_lpstr, vt_ui4, vt_byref | vt_i1, vt_int)

 

Спасибо за оказанную помощь.


  • 1


#116157 QC OTA_API подскажите список полей для теста из тест листа

Написано Alex 22 марта 2013 - 06:57

Есть такой пример, в нём для каждого теста в тест листе берёться имя теста и его статус.

Set TSList = TSTestFactory.NewList("[force_refresh]")
   For i = 1 To TSList.Count
       testName = TSList.item(ix).field("TSC_NAME")
       testStatus= TSList.item(ix).field("TS_EXEC_STATUS")
   Next

Подскажите где можно посмотреть все поля для теста?


В help-е QC. Там должен быть help по структуре БД. В нем надо найти табличку, отвечающую за тесты. Наименования полей в этой таблице - Ваша цель
  • 1


#115071 Selenium2 проверка текста на двух страницах

Написано Alex 26 февраля 2013 - 07:56

Есть табличка с колонкой Name:
|Name|
| User |
После клика на User пользователя редиректит на страницу с настройками User-a. На этой странице есть хэдэр, который содержит в себе название User. Его можно найти по икспасу.

Вопрос следующий:
Как проверить, что после клика на |User| мы переходим на нужную страницу и ни на какую другую?

Я думала получить текст из таблички |User|, а потом применить assertEquals к хэдэру на странице настроек. Но не срабатывает - возможно, неправильно использую. Буду рада вашим советам.
Спасибо.


А что assertEquals пишет в expected и actual?
В остальном сам подход в принципе верен. Открытие самой странички (что открыта именно страница настроек пользователя) можно проверять по URL и/или наличию некоторого уникального для этой страницы элемента.

Факт открытия настроек именно этого пользователя проверяется действительно путем сравнения текста в каком-либо из полей страницы с данными пользователя, которого ожидаете.
  • 1


#114830 verifyValue vs try catch

Написано Alex 20 февраля 2013 - 07:41


Всем Доброго время суток,хотелось бв спросить, никто не сталкивался с ошибкой в Selenium при нажатии на кнопку,"Cannot clik on element".
Код такой:
driver.FindElement(By.Id("button1")).Click();

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


Как-то у нас темы переплелись.

parsecnet,

fail(verificationErrorString); - запускается, чтобы указать, что в тесте были ошибки (просто вы получите информацию об ошибках не по ходу их обнаружения, а по факту окончания теста). verificationErrorString будет не пустой, только если у вас были ошибки verify:

try {
assertEquals("10000", driver.findElement(By.id("PAYMENT")).getAttribute("value"));
} catch (Error e) {
verificationErrors.append(e.toString());
}

Последняя строка как раз добавляет описание ошибки к verificationErrors.

fail(verificationErrorString); - сгенерирует Exception, в котором и будут перечислены все ошибки verify. А также позволит показать, что тест failed (ошибки verify - это все равно ошибки и статус выполнения теста должен быть соответствующий). Для примера можете закомментировать эту строку с fail и увидите, что в этом случае ваш тест будет иметь статус passed, несмотря на наличие ошибок verify. Такой подход связан с ограничениями JUnit/TestNG

Wrestler,

Причин может быть много, нужно смотреть, что именно у вас происходит. Из распространенных:

1) Элемент невидим (надо выполнить scroll, чтобы элемент попал в зону видимости)
2) Элемент disabled
3) Элемент перекрыт другим элементом (не в фокусе)
4) что-то свое..

Чтобы избежать такой ситуации используйте WebDriverWait и ExpectedConditions.elementToBeClickable
  • 2


#114534 ChildObjects не работает с большими объемами данных

Написано Alex 12 февраля 2013 - 10:34

Здравствуйте, я столкнулся с такой проблемой:на веб срнице есть фрейм, под этим фреймом дерево файлов. для навигации по дереву я получаю ChildObjects у фрейма и потм выбираю из полученой коллекции нужный мне нод и кликаю на него. проблема в том что когда дерево развернуто не полностью то все работает отлично, а если на нем уже открыто больше 50 нодов то выпадает ошибка: general run error. при дебаге показывает что oCollection.count = 1 , а oCollection.item(0)= <cannot evaluate>. Возможно кто-то уже сталкивался с подобной проблемой или знает пути ее решения? зарание спасибо за ответ.

Возможно, проблемы с памятью. А может дерево не до конца загружен и рефрешится в момент получения child objects.

Попробуйте подождать перед получением коллекции.

Если не поможет, то используйте xpath для обхода элементов дерева (поддерживается с 11-й версии)
  • 1


#113570 Selenium 2 + JUnit - выбор рандомного имени из списка

Написано Alex 16 января 2013 - 06:00

Вопрос совсем-совсем новичка как в автоматизации тестирования, так и в Java (нахожусь в процессе изучения)

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

Пока у меня код вот такой:
//открываю форму сообщения
driver.get(baseUrl + "mailmessages/compose.php");
//нажимаю на кнопку "контакты"
driver.findElement(By.id("contacts_link")).click();
//по задумке это должно отмечать все контакты, которые есть в списке
Select selectElement = new Select (driver.findElement(By.id("contact_all")));

//здесь должен идти код, который рандомно из всего списка контактов выбирает один

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

driver.findElement(By.id("add_button")).click();

Сорри за совсем уж новичновы



1) Получить количество всех элементов в списке (например, select.getOptions().size())
2) с помощью Random сгенерировать рандомный индекс в диапазоне от 1 до количества элементов
3) выбрать элемент списка по индексу

примерно код по идее будет выглядеть так:

List<WebElement> options = select.getOptions();
int count = options.size();
int randomIndex = getRandom(1, count); //как реализовать random можно посмотреть в интернете
options.get(randomIndex-1).select(); //-1 потому что индекс начинается с 1
  • 1