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

Alex

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

#112612 QTP. Проверка поля на возможность ввода

Написано Alex 05 декабря 2012 - 08:48


ищите свойство readonly. Если не найдете, пробуйте ввести текст и посмотрите потом результат ввода.

Если попытаться ввести текст, то автотест прерывается с ошибкой. Readonly нету

1) MyObject.GetROProperty("Enabled") или MyObject.GetROProperty("Disabled"), в зависимости от типа контрола. Это в принципе нормально работает с не WEB контролами
2) Для WEB контролов MyObject.Object.Disabled
3) Наконец контрольный вариант:
Function CanEnterText(obj, text)

CanEnterText = False

On Error Resume Next
obj.Set text

If Err.Number=0 Then
CanEnterText = True
End If

On Error GoTo 0

Exit Function

  • 1


#106044 [QTP 11] Найти Web элементы по XPath и их количество

Написано Alex 29 мая 2012 - 08:35

Приветствую.
Сразу просьба сильно не пинать, только начал разбираться, дневное гугление вопроса результата не принесло.
Собственно не могу понять каким образом можно подсчитать количество элементов найденных при помощи XPath выражения:
Browser("onliner.by").Page("Купить оптику Canon").Link("xpath:=//a[contains(@href,'canon/')]").Count
Ругается что нет такого метода Count для данного выражения.
Как решить этот вопрос?
Знаю что можно подсчитать элементы через создание Дескрипшена, но в нём как я понял указываются только конкретное содержание свойства. Конечно возможно решение через подсовывание регэкспа в свойство, но с ним пока тоже сильно не разбирался.
Хотелось бы узнать как можно решить проблему через использование XPath или регэксп (а лучше и то и другое)

У меня установлен:
QTP 11 (with add-in for IE9)
IE 9
Windows 7 32-bit

Заранее спасибо!

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


Dim oDesc

Set oDesc = Description.Create
oDesc("micClass").Value = "Link"
oDesc("xpath").Value = "//a[contains(@href,'canon/')]"
oDesc("xpath").RegularExpression = False

Dim oLinks

Set oLinks = Browser("onliner.by").Page("Купить оптику Canon").ChildObjects(oDesc)
MsgBox "Ссылок с xpath: " & oLinks.Count
Вообще, не ленимся почитать help
  • 1


#105592 Не виден код AJAX iframe

Написано Alex 16 мая 2012 - 09:12


Насколько я понял, там обычные контролы, а не подгружающийся фрэйм.
Если он грузится действительно долго, можно попробовать ожидать readyState (frame.contentDocument.readyState). Но это поможет, если в самом фрэйме нет ajax. Если и там есть ajax, то работать в два этапа:

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

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


try {
    Thread.sleep(n);
} catch (InterruptedException e) {
    e.printStackTrace();
}
driver.switchTo().frame(0);
Знаете, я просто использовал этот таймер, который ждет n секунд и наконец получил внутренности фрейма! :clapping:

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

Не поможете с реализацией этого кода?

Нашел такой пример:
private WebElement foundElement;
public WebElement find(By by){
    for (int milis=0; milis<3000; milis = milis+200){
        try{
            foundElement = driver.findElement(by);
        }catch (Exception e){
            try {
                Thread.sleep(200);
            } catch (InterruptedException e1) {
                e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
        }
    }

    return foundElement;

}

Наверное, лучше использовать бесконечный цикл?


Для реализации ожидания элемента необходимо использовать WbeDriverWait или implicityWait. Подробнее посмотрите по ссылке: http://seleniumhq.or...r_advanced.html
  • 1


#105443 Не виден код AJAX iframe

Написано Alex 14 мая 2012 - 08:14

Здравствуйте, уважаемые форумчане!
Я начал осваивать функции Selenium WeDriver 2 и столкнулся с проблемой:
у меня есть динамически загружаемый AJAX iframe, код которого мне необходимо протестировать.
Работаю с Firefox, загружаю необходимую страницу. Когда захожу посмотреть исходный код через Ctrl+U, iframe не имеет внутренностей!

Устанавливаю плагин Firebug, который позволяет смотреть код как в хроме, и в нем почему-то отображаются внутренности данного iframe:

WebDriver тоже не видит внутренности.

Кто знает, что нужно делать?

Использую Selenium WebDriver 2.21 + JUnit 4 + Eclipse

Спасибо


Скорее всего, код в iframe загружается постфактум (AJAX именно так и должен делать). Ctrl+U - это судя по всему просмотр исходного кода страницы, который включает то, что вернул сервер на запрос страницы и не учитывает никак отработавшие JS-вызовы (в том числе AJAX). А вот Firebug показывает структуру страницы как она есть сейчас, а не как она была получена изначально.

По поводу webdriver:

1) надо дождаться загрузки фрэйма
2) не забыть выполнить switchTo
  • 1


#101578 Работа awt.robot в фоновом режиме

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



Добрый день!

На данный момент занимаюсь автоматизацией тестирования графического приложения. Соответственно, для решения задач, связанных с графикой, приходиться работать с низкоуровневыми операциями. Для этих целей использую класс java.awt.robot. Когда писал и отлаживал тесты на локальной машине с активным в момент прогона тестов браузером проблем абсолютно никаких не возникало и все работало должным образом.

В процессе настройки CI столкнулся с такой проблемой:
После билда (используем TeamCity в качестве CI сервера) получаем интересную картину – тесты падают при обращении к классу Robot. Т.е. все, что до этого делает webdriver, выполняется правильно.
Подскажите, пожалуйста, каким образом можно решить эту проблему?
Возможно, кто-то знает альтернативу роботу? Чтобы класс мог работать с низкоуровневыми операциями, но при этом, мог выполнять их в фоне.
Всем спасибо.


Добрый день.

А с какой ошибкой падает? Падает при создании объекта класса Robot или при вызове каких-то методов?


Здравствуйте!

Падает в том месте, где идет проверка нарисованной фигуры. Т.е. я выбираю инструмент для рисования (это делается средствами webdriver'a, поэтому проблем в этом месте не возникает), далее эстафету перенимает робот и с помощью низкоуровневых операций он должен нарисовать определенный объект. Последнего, в результате, не происходит. Следующим, после рисования, шагом является проверка нарисованного объекта, а т.к. объекта нет - тест падает с ошибкой вебдрайвера (can't find element).

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

Главная задача сейчас - найти способ работать с роботом в фоновом режиме. Если нет, то найти альтернативу. Можно конечно использовать класс Actions (из API webdriver'a), но это для решения задач текущего проекта не является оптимальным решением, есть определенные подводные камни.


Вероятнее всего проблема в отсутствии пользовательской сессии с desktop-ом на тестируемой машине. Эта проблема не только Robot, но и многих других схожих инструментов.

На ум приходят два решения:

1) Настроить CI таким образом, чтобы при выполнении тестов на машине была сессия с desktop;
2) Попробовать рисовать не с помощью Robot, а с помощью API браузера/окна браузера.

Вот здесь примерно описана суть проблемы работы с графикой при удаленном выполнении тестов:

http://stackoverflow...s-a-black-image
http://stackoverflow...pturescreenshot

+ google в помощь
  • 2


#100228 LoadRunner, выбор переменных

Написано Alex 31 января 2012 - 06:36

Добрый день!

Может уже подобный вопрос задавался,но на форуме увы не нашел подобного.

Есть задача провести нагрузочное тестирование в LoadRunner. Но нужно сделать так что бы определенный параметр брал для каждого Vuser уникальное значение. Я создал файл со всеми значениями, указываю как {param}, но берет только первое значение.
Подскажите, пожалуйста, как сделать что бы брало по значению на юзера? и возможно ли это в принцепи?

Спасибо


Читаем Programs->LoadRunner->Documentation->VuGen User Guide. Раздел Parameters. \
Ваш вариант: File, Table Parameter Types (setting properties) или Inrernal Parameter Types (Unique Number)
  • 1


#99802 Вопросы насчёт тестирования jqGrid

Написано Alex 20 января 2012 - 07:13

Даже более подходящим будет наверное событие:

gridComplete

This fires after all the data is loaded into the grid and all other processes are complete. Also the event fires independent from the datatype parameter and after sorting paging and etc.
  • 1


#97203 Selenium 2 - Не открывается окно после нажатия на кнопку

Написано Alex 17 ноября 2011 - 07:21

У меня возникла следующая проблема с Selenium.
Я пишу тест для Facebook application. Он находится в iframe. Я переключаюсь в этот iframe и все работает хорошо до тех пор, пока я не жму на кнопку, после нажатия на которую должно появиться окошко c полями ввода email и message (смотрите скриншот). Но когда я запускаю программу, то она выдает ошибку "Element is not currently visible and so may not be interacted with; duration or timeout: 6.07 seconds".
Я думаю, что это из-за того, что окошко при проигрывании скрипта не появляется. Но я не понимаю почему. Вот код:

WebElement myelementEmailButton = mydriver.findElement(By.id("mail-fapp"));

myelementEmailButton.click();

WebElement myelementEmailForSharing = mydriver.findElement(By.id("email"));

myelementEmailForSharing.sendKeys("Логин");

WebElement myelementEmailSharingText = mydriver.findElement(By.id("message"));

myelementEmailSharingText.sendKeys("Сообщение");

myelementEmailSharingText.submit();

И кнопка и окошко находятся в одном iframe, следовательно оно должно находить поле для ввода имейла.
Как то так... Буду очень благодарна за помощь. Старалась описать детально. Если что не понятно - уточняйте. Спасибо! :)


Element not visible значит, что элемент есть, но он вне зоны видимости. Следовательно, либо окошко все же открывается (что маловероятно), либо ошибка проявляется не после нажатия на кнопку, а в момент. Т.е., ошибка говорит, что кнопку, на которую надо нажать, not visible и поэтому selenium не может ее нажать. Для того, чтобы сделать элемент visible надо проскролить страницу.

Обычно помогает вот такой вариант:

WebElement myelementEmailButton = mydriver.findElement(By.id("mail-fapp"));

((RemoteWebDriver)mydriver).executeScript("arguments[0].scrollIntoView()", myelementEmailButton );


myelementEmailButton.click();
  • 1


#96903 Событие Click

Написано Alex 11 ноября 2011 - 07:47

Для InternetExplorer:

((JavascriptExecutor)driver).executeScript("arguments[0].fireEvent('onClick');", element);

Для остального:

((JavascriptExecutor)driver).executeScript("var evt = document.createEvent('MouseEvents');" +
"evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);" +
"arguments[0].dispatchEvent(evt);", element);
  • 1


#95583 Не активен пункт меню

Написано Alex 17 октября 2011 - 11:50

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

JavaWindow("Программа конфигурирования").JavaTree("Tree: Configuration System").OpenContextMenu "viktor;Сервера;server1;Адаптеры"

в этом самом месте, при открытии контекстного меню, обнаруживаю, что нужный пункт неактивен

JavaWindow("Программа конфигурирования").JavaMenu("Добавить адаптер").Select

соответственно возникает ошибка


Попробуйте вместо .OpenContextMenu что-нибудь вроде:

Extern.Declare micDWord, "GetMessagePos", "User32.dll", "GetMessagePos"

JavaWindow("Программа конфигурирования").JavaTree("Tree: Configuration System").Select "viktor;Сервера;server1;Адаптеры" ‘выделяем нужную строку

coords = CLng(Extern.GetMessagePos())
abs_x = coords mod 65536
abs_y = Fix(coords/65536)

win_x = JavaWindow("Программа конфигурирования").JavaTree("Tree: Configuration System").GetROProperty("abs_x")
win_y = JavaWindow("Программа конфигурирования").JavaTree("Tree: Configuration System").GetROProperty("abs_y")

x = abs_x-win_x
y = abs_y-win_y

JavaWindow("Программа конфигурирования").JavaTree("Tree: Configuration System").Click x, y, micRightBtn ‘правый клик по нужным координатам

wait 1 ‘ожидание, чтобы появилось контекстное меню, иначе следующая строка приведет к exception в приложении

‘Код для выбора в контекстном меню
  • 1


#94962 Не срабатывает подтверждение при удалении.

Написано Alex 30 сентября 2011 - 04:46

Довольно странно, но в тот момент,когда появляется окно с подтверждением, тест как будто останавливается, и пока я не нажму ОК/Cancel у меня не проходит даже print_r($this->getAllWindowTitles());


Это потому что клик не считается законченным до тех пор пока не нажать cancel или OK в окне alert (соответственно скрипт ждет пока действие click выполнится). Именно поэтому команды chooseOk(Cancel)OnNextConfirmation вызываются перед кликом. Скорее всего проблема в версии браузера. Попробуйте на какой-нибудь более надежной и известной версии попробовать.
  • 1


#91896 Log4j и Selenium 2.0rc3 - Помогите решить проблемку!

Написано Alex 01 августа 2011 - 06:03

Пример во вложении

Прикрепленные файлы

  • Прикрепленный файл  log4j.xml   2,07К   22 Количество загрузок:

  • 1