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

Публикации frei_by

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



#83314 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: frei_by 19 января 2011 - 19:41 в Selenium - Functional Testing

...попробовать сделать вот так getXpathCount("//iframe[@id='1']//div[@class='combobox-1']") уже получаем 0.
Может, кто сталкивался с таким, и знает как побороть такую траблу =)

1)перключится в фрейм $this->selectFrame("");
2)потом только считать xpath.
таким образом пробовали?



#78801 Selenium RC server (PHP)

Отправлено автор: frei_by 14 октября 2010 - 08:23 в Selenium - Functional Testing

Общение с сервером через лес классов PHPUnit drives me crazy.
Подскажите где посмотерть либо приведиет пример запросов для сервера. Хочу попробовать используюя PHP общатся с сервером напрямую. Мне как-то это будет проще возможно, потому что HTTP, мне кажется, знаю лучше, чем структуру классов классов наследников классов....



#78815 Selenium RC server (PHP)

Отправлено автор: frei_by 14 октября 2010 - 13:47 в Selenium - Functional Testing

всё что пишу напоминает сл. структуру:
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class Example extends PHPUnit_Extensions_SeleniumTestCase
{
  protected function setUp()
  public function test_comps()
}

А с утра мне захотелось написать что-то вроде

$myvar = new Example;
$myvar -> setUp();
$myvar -> test_comps();

при попытке такого обращения выдало ошибку что сессия не начата.
Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Could not find class

получается что Example наследует от PHPUnit_Extensions_SeleniumTestCase
PHPUnit_Extensions_SeleniumTestCase наследует от PHPUnit_Framework_TestCase
а в PHPUnit_Framework_TestCase происходят реально чудеса, вроде тех, что в файле
File/Iterator/Factory.php и Iterator.php
т.е. парсятся назавания функций
test_comps()
и если они не начинаются со слова test то не выполняются.

мне пока-что (а собственно начал что-то осознанно писать для selenium на php только вчера) - скорее просто непривычно писать таким образом. Внутри класса.
До этого долгое время общался с Jmeter, поэтому испытываю дискомфорт от того что не вижу, каким образом и какие данные отпрваляются серверу.

Одна из первых задач перед мной посавленных - сделать на selenium автоматического паука который проходит по сайту и снимает массу скриншотов со страниц. У меня. Делается это для дизайнеров чтобы им не нужно было тыкать по ссылкам а просто запустить скрипт и посмотреть на результаты.

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



#79068 Selenium RC не закрывал окно браузера

Отправлено автор: frei_by 21 октября 2010 - 12:26 в Selenium - Functional Testing

для phpUnit это может выглядеть например так:

protected function  tearDown() {
        parent::tearDown();
        //some functions
        die ('tear down!');
    }

Просто добавте эту функцию в класс

class Example extends PHPUnit_Extensions_SeleniumTestCase
{ 
    protected function setUp()
      {
        $this->setBrowser(BROWSER1);
        $this->setBrowserUrl(HOME);
      }
    
    public function test1() // ваш тест
    {}

    protected function  tearDown()
    {}
}

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



#79556 Selenium RC не закрывал окно браузера

Отправлено автор: frei_by 04 ноября 2010 - 14:23 в Selenium - Functional Testing

Как приятно читать доки по инструменту которым пользуешся. Я бы даже сказал выкинь бубен, и сделай как положено.
В PHPUnit в классе PHPUnit_Extensions_SeleniumTestCase от которого наследуется тест есть функция
protected function onNotSuccessfulTest(Exception $e)

Просто просмотрев которую становится понятно что и как может сделать Selenium.

всего-то делов - переопределить её в классе тесов.
И не нужно лазить в Driver.
Мне стыдно за те посты которые писал до этого.

Мне кажется пока-что это неплохим решением...



#79111 Selenium RC не закрывал окно браузера

Отправлено автор: frei_by 22 октября 2010 - 09:29 в Selenium - Functional Testing

Продолжая тему грязных хаков, а также особенностей общения с RC сервером, Очень интересные функции можно посмотреть в файле driver.php который для PHPUnit находится в папке
/pear/PHPUnit/Extensions/SeleniumTestCase/Driver.php

В частности, там можно найти функцию

public function stop()
    {
        if (!isset($this->sessionId)) {
            return;
        }

        $this->doCommand('testComplete');

        $this->sessionId = NULL;
    }

При вызове которой можно заметить что она посылает серверу команду 'testComplete', насколько я понимаю, и убивает sessionId.
Заккоментируйте

//$this->doCommand('testComplete');
//$this->sessionId = NULL;

И в этом случае если какой-то метод вернёт ошибку -
например, как вызывается
protected function doCommand($command, array $arguments = array())

protected function doCommand($command, array $arguments = array())
{
...
if (!preg_match('/^OK/', $response)) {
            $this->stop();

            throw new PHPUnit_Framework_Exception(
              sprintf(
                "Response from Selenium RC server for %s.\n%s.\n",
                $this->commands[count($this->commands)-1],
                $response
              )
            );
        }
Упс, сервер не вернул ОК - вызываем функцию stop(); - а в ней НЕ произошло сброса. И команда завершить тест серверу послана не была.))



#85042 Selenium и Post request

Отправлено автор: frei_by 01 марта 2011 - 11:39 в Selenium - Functional Testing

А можете подробнее рассказать, а то как-то все туманно.
Цель следующая, надо отправить post запрос, распарсить его и найти нужное значение, которое в дальнейшем обрабатывать.
Именно запрос, а не нажатие кнопки


Мне почему-то кажется что вам нужно не то чтобы отправить, а споймать post запрос, и потом его распарсить. А генерируется он у вас каким нибудь джава-скриптом.



#79211 Selenium ошибка при вызове метода wait_for_page_to_load

Отправлено автор: frei_by 25 октября 2010 - 13:02 в Selenium - Functional Testing

версия для php обработчика click and wait

$this->click('//a[@onclick=\'PriceEdit1("");\']'); //тот самый клик

$flag = false;
for ($i=1;$i<=(WAIT/1000);$i++)
{
$flag = $this->isElementPresent('//td[text()=\'ГЕНЕРАЦИЯ ПРАЙС-ЛИСТА\' and @class=\'head_main_table\']');
sleep(1);
}
if ($flag === false) {$this->fail('Oops! I did it again!');}

где
define ('WAIT', 30000);
//td[text()=\'ГЕНЕРАЦИЯ ПРАЙС-ЛИСТА\' and @class=\'head_main_table\']
- ожидаемый элемент на странице

PS чуть не забыл, всё это оформляется в виде отдельной функции и перед sleep(1); пишется if ($flag===true){return;} - иначе придётся ждать сколько положено. ))

function go_to_step1 ()
    {
      $this->click('//a[text()=\'Добавить\']');
      $flag = false;
      for ($i=1;$i<=(WAIT/1000);$i++)
      {
          $flag = $this->isElementPresent('//td[text()=\'ГЕНЕРАЦИЯ ПРАЙС-ЛИСТА\' and @class=\'head_main_table\']');
          if ($flag === true) {return;}
          sleep(1);
      }
      if ($flag === false) {$this->fail('Oops! I did it again!');}
    }



#83801 seleniumRC 1.0.3 + Firefox

Отправлено автор: frei_by 02 февраля 2011 - 12:08 в Selenium - Functional Testing

Извините, вопрос может быть наивный, а в ответе от сервера точно стоит заголовок Content-type = text/html ?



#83302 SeleniumRC PHP обмен данными между тестами

Отправлено автор: frei_by 19 января 2011 - 16:09 в Selenium - Functional Testing

Проблема такая. Занимаюсь написанием тестов для RC на php.
Есть конструкция из тестов:

class Example extends PHPUnit_Extensions_SeleniumTestCase
{
protected $arr_all; //property for script exchange

public function test_one()
	{...
	$this->arr_all = array (); //full array
	...
	var_dump ($this->arr_all);//array present
	}
public function test_second()
	{
	var_dump ($this->arr_all);//empty!!!!
	}
}

По моей задумке в первом тесте записывается $arr_all а во втором тесте считывается. ООП в php знаю очень приблизительно поэтому прошу снисхождения.

Для всего класса я объявляю свойство $arr_all;
далее в первом тесте test_one() присваиваю ему массив, и для проверки делаю var_dump - всё ок, свойство присвоилось.

Но когда во втором тесте test_second() я вновь пытаюсь обратится к данному свойству - то возвращает var_dump ($this->arr_all);//empty!!!! - NULL.

тесты исполняются один за другим. Пробовал сделать $arr_all; privaty либо public - не помогает. Можно конечно записать в сериализованный файл результаты работы одного теста а потом в другом тесте прочитать этот файл, но не вариант. Хотелось-бы именно в скрипте через переменные / поля класса.

Подскажите пожалуйста способ обмена информацией межуд тестами в пределах одного класса class Example ну или альтернативное решение. Спасибо...



#83310 SeleniumRC PHP обмен данными между тестами

Отправлено автор: frei_by 19 января 2011 - 17:17 в Selenium - Functional Testing

У меня первый тест и не тест вовсе, а просто подготовка данных для provider.

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

До этого у меня именно так и работало, в одном тесте считывал данные и проверял по ним. Но я решил немного рефакторнуть, и сформировать массив отдельно и сделать вот как здесь,
чтобы у меня provider сформировал именно так, и сделал это автоматически:
return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
        );

Данные на второй странице зависят от данных на первой странице, причём на первой странице они генерирутся условно случайно, и результат работы второй страницы зависит от данных на первой.

Попробуйде этот массив сделать статическим и public

не помогло почему-то. Возможно ошибка в чём-то дургом, а возомжно phpunit пересоздаёт класс Example extends PHPUnit_Extensions_SeleniumTestCase перед каждым тестом, с него станется.

папка temp, serialize, fopen, fwrite,.... думаю буду делать так.



#78990 Silenium IDE

Отправлено автор: frei_by 20 октября 2010 - 06:36 в Selenium - Functional Testing

напишите структуру html в которую вставляется новая запись. Выше или ниже под дереву ближайший элемент со статическим id. Либо любой уникульный кусок дерева который можно использовать как ориентир.

если известно название, то //a[contains(text(),\'$ваш_текст\')]@href - атрибут href у ссылки содержащей текст = ваш текст
я думаю как минимум так,
если приведёте кусок кода - можно больше вариантов напридумывать.



#78136 SilkTest with Firefox

Отправлено автор: frei_by 21 сентября 2010 - 07:10 в MicroFocus (Borland, Segue) - Functional testing

Привет всем. Кто-нибудь разрабатывал и запускал тесты на Firefox? Какой Силк вы использовали для Firefox3.5?


недавно пробовал запустить 3.6 firefox под SilkTest 10. Проверял корректность по Run - Application Satate. Броузер запускает, но с объектной моделью разобраться не может. Агент висит 180 секунд и потом выдаёт что-то вроде не удалось восстановить default base state. Почитал SilkTest - овский blogpost - ничего не нашёл по этому поводу кроме того, что новые версии броузеров не поддерживаются... ((



#78135 SilkTest with Firefox

Отправлено автор: frei_by 21 сентября 2010 - 07:10 в MicroFocus (Borland, Segue) - Functional testing

Привет всем. Кто-нибудь разрабатывал и запускал тесты на Firefox? Какой Силк вы использовали для Firefox3.5?


недавно пробовал запустить 3.6 firefox под SilkTest 10. Проверял корректность по Run - Application Satate. Броузер запускает, но с объектной моделью разобраться не может. Агент висит 180 секунд и потом выдаёт что-то вроде не удалось восстановить default base state. Почитал SilkTest - овский



#78751 SleniumRC + NetBeans

Отправлено автор: frei_by 13 октября 2010 - 08:46 в Selenium - Functional Testing

Ну в общем я разобрался почему RC не хотел запускать Firefox. Правильный ответ - запускать нужно с новым профилем. Дело в том что Netbeans умеет сам запускать RC, причём делает это в двумя параметрами: serverport = 4444 и StartOnNetBeansStartUp = cheked.

Я создал bat файл
pause
java -jar C:\Program" "Files\selenium\selenium-server-1.0.3\selenium-server.jar -firefoxProfileTemplate "D:\selenium\profiles\ff368"
pause
pause - чтобы были паузы и возможнотсть прочитать output.
в папке ""D:\selenium\profiles\ff368" - создал новый профиль,
накатил на этот профиль screengrub, чтобы можно было снимать скриншоты,


и вот такой вот код:
class Example extends PHPUnit_Extensions_SeleniumTestCase
{
  protected function setUp()
  {
    //$this->setBrowser("*piiexplore");
    $this->setBrowser("*firefox3");
    $this->setBrowserUrl("http://_УРЛ_сайта_");
  }

  public function testMyTestCase()
  {
    $this->open('/');
    $this->getSpeed(100);

    // окно к размеру 1024
    $this->storeEval("window.resizeTo(1048, 666)");
    // скриншот главной страницы
    $loc = $this->getLocation();
    
    $this->captureEntirePageScreenshot("d:\shots\main.jpg");
   
  }

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

На правильный ответ натолкнуло вот это -
http://www.qaautomation.net/?p=15



#78752 SleniumRC + NetBeans

Отправлено автор: frei_by 13 октября 2010 - 08:50 в Selenium - Functional Testing

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

Из того что вы писали на java (а java я не знаю вообще) - уловил что вы предлагаете делать обработку исключений для команды open и если команда open лажанётся, просто проверить что на странице присутствует искомый элемент - и соответственно ждать больше нет смысла.



#78737 SleniumRC + NetBeans

Отправлено автор: frei_by 12 октября 2010 - 14:39 в Selenium - Functional Testing

c открытием ff проблемы, зато получилось открыть *iexplore:

тескейс который ничего не делает проходит отлично:

<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class newSeleneseTest1 extends PHPUnit_Extensions_SeleniumTestCase {
function setUp() {
$this->setBrowser("*iexplore");
$this->setBrowserUrl("http://shop5.test.shop.by/");
}

function testMyTestCase() { }
}
?>


но если что-то посложнее - начинаются неполадки.

public function testMyTestCase()
{
$this->open("/");


возвращает

1) Example::testMyTestCase
PHPUnit_Framework_Exception: Response from Selenium RC server for testComplete().
Timed out after 30000ms.
D:\selenium\test_project\sel\test2.php:15


причём 15 линия это как раз
$this->open("/");

Видно, что броузер запускается, открывается страница. Я так понимаю, что почему-то от сервера не приходит ответ....



#78735 SleniumRC + NetBeans

Отправлено автор: frei_by 12 октября 2010 - 14:22 в Selenium - Functional Testing

Установил RC сервер из NetBeans.

пытаюсь выполнить какой-нибудь тест-кейс.

Выдаёт ошибку -

PHPUnit 3.5.0 by Sebastian Bergmann.

E

Time: 36 seconds, Memory: 4.75Mb

There was 1 error:

1) newSeleneseTest1::testMyTestCase
PHPUnit_Framework_Exception: Response from Selenium RC server for getNewBrowserSession(*chrome, http://localhost:8080/).
Failed to start new browser session: Unable to delete file C:\DOCUME~1\9335~1\LOCALS~1\Temp\customProfileDir7a5dfd53eb844c8ab272db7535e6ef19\parent.lock.



FAILURES!
Tests: 1, Assertions: 0, Errors: 1.


подскажите, в чём секрет?
Что не так?



#81121 StoreAllFields: как правильно использовать по назначению?

Отправлено автор: frei_by 02 декабря 2010 - 12:13 в Selenium - Functional Testing

без чтения доков по php никак.
Массивы там могут быть многомерными и одномерными. Использовать именованные ключи либо автоматические.
К массиву можно обращатся через цикл foreach либо использовать курсор массива.

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

$super_mass = $mass; //для сохранности создаёте копию массива

function robot () //фукнция при каждом вызове возвращает следующий элмент массива $$super_mass
{
global $super_mass;//делаете массив видимым
global $iiii;//делаете видимым счётчик
$arr = $super_mass; //создаётё рабочую копию массива,
$arr = array_reverse($arr);//делаете чёрную магию
if (($arr = array_reverse($arr))&&!FALSE)//делаете чёрную магию
    {
       $iskomoe = reset($arr);//возвращаете первый элемент массива
       unset($super_mass [key($arr)+$iiii]);//делаете чёрную манию
    }
return $iskomoe;
}

вызвать её нужно вот так:

$a = robot ();

советую вам посмотреть и по возможности оптимизировать её работу.



#81132 StoreAllFields: как правильно использовать по назначению?

Отправлено автор: frei_by 02 декабря 2010 - 14:53 в Selenium - Functional Testing

$mass[$i]
- возвращает $i элемент из неассоциативного одномерного массива вида
$arr = array (1,2,3,4,5,6);
если у вас
ассоциативный массив - то работать не будет
если у вас многомерный массив - работать не будет - т.е. вернёт значение array - если ваш массив - многомерный массив состоящий из других массивов.

плз выполните
var_dump ($mass);

и если оно выдаст что-то отличное от
$mass = Array (
[0] => 'значение 0'
[1] => 'значение 1'
...
)
то в этом кроется ошибка.

массив должен быть доступен в классе теста - на php тесты выполняются под phpunit с в нескольких наследуемых друг от друга классах.
Для обхода массива - используйте foreach.



#80483 supportdetails.com

Отправлено автор: frei_by 22 ноября 2010 - 11:26 в Про тестирование обо всём подряд

Оу, можно записать в лог параметры GET запроса HTTP? Из GET можно извлечь версию броузера и ОС? Спасибо, кэп!



#80512 waitForPageToLoad

Отправлено автор: frei_by 22 ноября 2010 - 15:06 в Selenium - Functional Testing

Броузерные диалоги is windows based component и не могут быть отловлены из JavaScript песочницы. С подобными штуками справляются инструменты НЕ уровня JS движка броузера (=selenium) а уровня ОС (=silktest которым можно даже системный реестр править) или TC или QTP.
гугль посоветовал это:
http://www.jsystemtest.org/?q=node/70
-этим не пользовался

http://wiki.openqa.o...Idownloadafile?
-скачать без диалогового окна.

ну или только разве $this->keyPressNative(); может сработать.
Мне кажется так..



#81506 Автоматизация тестирования безопасности сайта

Отправлено автор: frei_by 08 декабря 2010 - 13:56 в Автоматизированное тестирование

nikto
доступен в резпозитариях debian это большой к нему плюс.
По поводу проведения сканирования - в логах можно увидеть конструкции вроде
ERROR: /splashAdmin.php returned an error: error reading HTTP response 
ERROR: /php/php.exe?c:\boot.ini returned an error: error reading HTTP response
вторая строка особенно забавно смотрится, учитывая то, что сервер заведомо на линуксе.
а splashAdmin.php - заведомо известсно что такого файла не существует.



#81179 Автоматизация тестирования безопасности сайта

Отправлено автор: frei_by 03 декабря 2010 - 09:16 в Автоматизированное тестирование

Умея пользоваться Jmeter/средство для формирования запросов = <любой язык програмирования, умеющий работать с HTTP> вы сможете сами писать любые атаки на сайт прозивольно вводя в запрос нужные вам данные. Все атаки в конечном итоге сводятся к формированию нестандартных данных в запросе, будь то это GET POST ajax... формируете себе набор фирменных тестовых данных и для каждой переменной будь то это ?var=<вставляете сюда всякую дрянь>
и придумать нужно как проверять потом целостность. ведь не обязательно при удачной атаке выводится сообщение об ошибке.

"бесплатные решения для проведения автоматизированного тестирования на безопасность всего сайта"
- думаю что это миф.

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



#78138 Автоматическое тестирование верстки сайта

Отправлено автор: frei_by 21 сентября 2010 - 07:30 в Автоматизированное тестирование

1. вводит в браузер url. (причем разные браузеры)
(добавить пункт 0 - открыть в одной ОС несколько разных броузеров и умудрится переключатся между ними)

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

3. сохраняет результат как скриншот в определенную папку.
(и сам его смотрит. ага. автоматические тесты требуют ручного тестирования.)