пятница, 25 ноября 2016 г.

SQL Oracle: Tips&Tricks

How to know which version of DB is used? 
   select * from v$version
 
Pagination on Oracle by RowNum
link on oracle 
 
Examples: worked query
SELECT PGM_META_ID
            FROM 
              (select a.*, rownum rnum
                FROM
                  (select * from
                  PGM_EPISODEINFO
                  WHERE  EPISODE_TITLE is null) a
                WHERE rownum <= 150
              )
            WHERE rnum >= 148
... in progress (not work)...
select * FROM ID_MAP WHERE PGM_META_ID in         
  (SELECT PGM_META_ID
            FROM 
              (select a.*, rownum rnum
                FROM
                  (select * from
                  PGM_EPISODEINFO
                  WHERE  EPISODE_TITLE is null) a
                WHERE rownum <= 150
              )
            WHERE rnum >= 148);
     
 
 

вторник, 15 ноября 2016 г.

AQA. Введение в XPath (часть 2). Основы построения запросов

Где при тестировании может понадобиться XPath, а также обзор инструментальных средств для отладки XPath-запросов можно найти в предыдущей статье. Что же представляет из себя xpath-запрос? XPath (XML Path Language) — язык запросов к элементам XML или XHTML документа. XML имеет древовидную структуру. В документе всегда имеется корневой элемент. У элемента дерева всегда существуют предки (исключение — корневой элемент, у которого предков нет) и могут существовать потомки. Каждый элемент дерева находится на определенном уровне вложенности. У элементов на одном уровне бывают предыдущие и следующие за ним элементы. Строка XPath — это фактически путь к элементу в дереве, где каждый уровень разделяется косой чертой «/». В результате обработки выражения XPath получается объект, который может быть: набор узлов (node-set) — неупорядоченный набор узлов без дубликатов булево значение (boolean) — true или false число (number) — число с плавающей точкой строка (string) — последовательность UCS символов Небольшой примерчик для старта:
* — обозначает любое имя или набор символов / — определяет уровень дерева Если в запросе первым символом стоит «/» , то путь адресации считается абсолютным (то есть от корня документа). Корень документа всегда является контекстом по умолчанию. Контекст — это текущий полученный узел или набор узлов, относительно которых рассчитывается следующий шаг. Оси Оси это основа запросов XPath и их обязательная часть. ancestor:: — возвращает множество предков. ancestor-or-self:: — возвращает множество предков и текущий элемент. attribute:: — возвращает множество атрибутов текущего элемента. child:: — возвращает множество потомков на один уровень ниже. descendant:: — возвращает полное множество потомков. descendant-or-self:: — возвращает полное множество потомков и текущий элемент. following:: — возвращает необработанное множество, ниже текущего элемента. following-sibling:: — возвращает множество элементов на том же уровне, следующих за текущим. namespace:: — возвращает множество имеющее пространство имён (то есть присутствует атрибут xmlns). parent:: — возвращает предка на один уровень назад. preceding:: — возвращает множество обработанных элементов исключая множество предков. preceding-sibling:: — возвращает множество элементов на том же уровне, предшествующих текущему. self:: — возвращает текущий элемент. Для наиболее часто используемых осей существуют сокращения: attribute:: — можно заменить на «@» child:: — часто просто опускают descendant:: — можно заменить на «.//» parent:: — можно заменить на «..» self:: — можно заменить на «.» Для приведенного выше примера
Чаще xpath-запрос начинают с «.//» или «//», это делает путь к элементу относительным. Символы ".//" в начале запроса возвращают полное множество потомков, которые являются дочерними для корня документа, т.е. все элементы на текущей странице. В данном случае точку в начале запроса можно опустить, потому что корневой элемент уже является контекстом. Первый пример можно переписать так:
Важную роль в построение запросов играют предикаты — это необязательная часть, заключаемая в квадратные скобки, в которой могут содержаться оси, условия проверки, функции и операторы. В ходе обработки предиката из полученного на шаге набора узлов исключаются узлы, не прошедшие условие проверки. Например, найдем элемент span, находящийся внутри любого элемента с id = «first»

Введение в XPath (часть 1). Поддержка XPath в Selenium и инструментальные средства.

XPath (XML Path Language) — язык запросов к элементам XML или XHTML документа, реализующий навигацию по DOM. XPath предназначен для использования другими спецификациями, такими как XSL Transformations (XSLT) и XML Pointer Language (XPointer).
WebDriver предоставляет несколько способ поиска элементов. Идентификация поиска осуществляется при помощи класса By. Одним из вариантов поиска By является xpath, принимающий в качестве параметра строку, представляющую собой xpath-запрос:

driver.findElement(By.xpath("//input[@id='login']"));
 
Будьте внимательны, используя xpath. Selenium при построении xpath-запроса использует стандартные обозначения — поиск начинается с «//», т.е. будет искать по DOM-дереву всего документа, а не только среди потомков текущего узла. Поэтому если вы выстраиваете поисковые запросы в цепочку, то используйте «.//» для того, чтобы ограничить поиск среди потомков элемента.

// найдет первый элемент a с классом "link" на странице:
driver.findElement(By.id("some-id")).findElement(By.xpath("a[@class='link']")); 

// найдет первый элемент a с классом "link" среди потомков элемента с id="some-id":
driver.findElement(By.id("some-id")).findElement(By.xpath(".//a[@class='link']"));

Если критериям поиска удовлетворяет несколько элементов, результатом выполнения findElement будет первый из них. Если же элемент не найден, будет выдано исключение NoSuchElementException.
Некоторые HTML элементы не нуждаются в явном указании атрибутов потому, что они имеют какое-то стандартное значение по умолчанию. Основное правило при использовании xpath — НЕ полагайтесь на то, что XPath-запрос обнаружит такой неявный атрибут.
Для браузеров, в которых встроенная поддержка XPath отсутствует, разработана собственная реализация поиска по xpath. Однако, в некоторых случаях, это может приводить к неожиданным результатам.
Driver Встроенная поддержка XPath
HtmlUnitDriver Yes
InternetExplorerDriver No
FirefoxDriver Yes
Скажу пару слов об инструментальных средствах XPath, которые могут пригодиться в ходе работы. Они позволяют отлаживать XPath-выражения и помогают при создании и проверке XPath. Их использование значительно облегчает написание тестов, в которых используется поиск элементов по xpath. Так как поле нашей деятельности — это тестирование сайтов и web-приложений, то и речь пойдет о поддержке XPath в браузерах:
  • Chrome xPath Viewer. Осуществляет поиск DOM элементов на текущей странице с заданными выражениями XPath и CSS селекторами. При наведении на найденный результат в списке подсвечивает элемент на странице. Щелчок правой кнопкой мыши на элементе возвращает абсолютное XPath выражение.
    Преимущества:
    — достаточно прост в обращении;
    — поддержка CSS.
    Недостатки:
    — когда xPath Viewer активен нет возможности вызвать контекстное меню для элемента правой кнопкой мыши;
    — предлагаемый xpath элемента строится только по тегам и позициям, не учитывая id;
    — нет поддержки svg-контента на странице.
     
  • Mozilla Firefox XPath Checker. Интерактивный редактор выражений XPath. Запускается из контекстного меню командой ‘View XPath’. Динамически обновляет результаты при редактировании запроса. Преимущества:
    — генерируемый xpath элементов строится оптимальным образом, используя id элементов;
    — успешно работает с svg-контентом и т.п. за счет поддержки различных namespaces.
    Недостатки:
    — необходимо закрывать и открывать XPath Checker, чтобы получить xpath нового элемента.
    — визуальное отображение найденных элементов в результатах — громоздко и бесполезно.
     
  • Mozilla FirePath. FirePath является расширением для Firebug, которое добавляет инструменты для редактирования, проверки и создания выражения XPath, CSS селекторов и селекторов JQuery.
    Преимущества:
    — генерируемый xpath элементов строится оптимальным образом, используя id элементов;
    — поддержка работы с различными namespaces;
    — отображение результатов в Firebug, в DOM-модели документа;
    — подсвечивание результатов непосредственно на странице.
Синтаксис и правила построения xpath-запросов описаны в статье Введение в XPath (часть 2). Основы построения запросов

четверг, 3 ноября 2016 г.

Selenium IDE: interactions

Simulating Keypress Events in Selenium IDE
Since version 2.3.0, Selenium IDE supports keyboard keypress events. We can simulate Selenium IDE keypress events using newly introduced sendKeys command. Keypress events can be utilized in WebDriver Playback as well. All in all, it’s a very useful addition in Selenium IDE. Therefore in this tutorial, we will discuss about different options available in Selenium IDE to handle keyboard keypress events.
Let’s see how to use sendKeys in Selenium IDE. sendKeys command takes locator and value parameters just like any other Selenium IDE commands. To define a keyboard key, you just have to prefix its value with ‘KEY_’ text and write it as variable(Eg. using ${ }). For example, below command hits Enter key on button called ‘login’.
You can combine text with keys. For example, ‘Testing Diaris${KEY_LEFT}e’. You can also perform keypress with modifier keys such as Alt, Ctrl, Shift, Command(in Mac) etc. The first occurance of a modifier key presses them and the second one releases it. All modifier keys are released at the end of the sendKeys command. It will not affect the subsequent sendKeys command. Below is an exhaustive list of supported keyboard commands in Selenium IDE.
Navigation Keys:
  • KEY_LEFT (Navigation Left)
  • KEY_UP (Navigation Up)
  • KEY_RIGHT (Navigation Right)
  • KEY_DOWN (Navigation Down)
  • KEY_PGUP / KEY_PAGE_UP (Page up)
  • KEY_PGDN / KEY_PAGE_DOWN (Page down)
  • KEY_END (End)
  • KEY_HOME (Home)
Function Keys:
  • KEY_F1 to KEY_12 (Function keys from F1 to F12)
Modifier Keys:
  • KEY_ALT (Alt)
  • KEY_CONTROL / KEY_CTRL (Ctrl)
  • KEY_META / KEY_COMMAND (Command)
  • KEY_SHIFT (Shift)
Num Pad Keys:
  • KEY_NUMPAD0 / KEY_N0 to KEY_NUMPAD9 / KEY_N9 (Number keys from 1 to 9)
  • KEY_ADD / KEY_NUM_PLUS (Plus)
  • KEY_DECIMAL/ KEY_NUM_PERIOD (Period)
  • KEY_DIVIDE/ KEY_NUM_DIVISION (Division)
  • KEY_MULTIPLY/ KEY_NUM_MULTIPLY (Multiply)
  • KEY_SEPARATOR/ KEY_SEP (Separator)
  • KEY_SUBTRACT/ KEY_NUM_MINUS (Minus)
Misc. Keys:
  • KEY_BKSP / KEY_BACKSPACE (Backspace)
  • KEY_DEL / KEY_DELETE (Delete)
  • KEY_ENTER (Enter)
  • KEY_EQUALS (Equals)
  • KEY_ESC / KEY_ESCAPE (Escape)
  • KEY_INS / KEY_INSERT (Insert)
  • KEY_PAUSE (Pause)
  • KEY_SEMICOLON (Semi-colon)
  • KEY_SPACE (Space)
  • KEY_TAB (Tab)
Tip: Do not create any other stored variable in your Selenium IDE script with KEY_ prefix.
We hope you would find the above post illustrating Selenium IDE keypress events useful. Let us know your views in comments.

Selenium IDE JavaScript and Command Parameters
The example below shows you how a JavaScript snippet can be used to perform a simple numerical calculation.
Command Target Value
store 10 Number1
store 20 Number2
storeEval parseInt(storedVars['Number1'])+parseInt(storedVars['Number2']) sumResult
echo ${sumResult}
Here is the above script execution result.
  • [info] Executing: |store | 10 | Number1 |
  • [info] Executing: |store | 20 | Number2 |
  • [info] Executing: |storeEval | parseInt(storedVars['Number1'])+parseInt(storedVars['Number2']) | sumResult |
  • [info] script is: parseInt(storedVars['Number1'])+parseInt(storedVars['Number2'])
  • [info] Executing: |echo | ${sumResult} | |
  • [info] echo: 30


JavaScript Usage with Non-Script Parameters

JavaScript can also be used to help generate values for parameters, even when the parameter is not specified to be of type script. However, in this case, special syntax is required–the JavaScript snippet must be enclosed inside curly braces and preceded by the label JavaScript.

Command Target Value
store 10 Number1
store 20 Number2
echo javascript{parseInt(storedVars['Number1'])+parseInt(storedVars['Number2'])}


четверг, 28 июля 2016 г.

Как переименовать много файлов за раз

Часто возникает такая ситуация, что нужно массово переименовать файлы. Будь это название или расширение файла. Иногда нужно убрать часть текста из названия (например, адрес сайта или фирмы). Если файлов всего несколько, то ничего страшного. А что делать когда файлов 50, 100 или тысяча?
Есть несколько решений как быстро переименовать много файлов: командной строчкой или кучей программ. Одно из самых удобных решений — это переименовать файлы в папке по шаблону тоталкомандер.

Как переименовать файлы в тотал коммандер

Чтобы переименовать много файлов нужно зайти в папку, где находяться файлы. Выделить те файлы, которые будем переименовывать.
Пакетное переименование файлов в totalcommander
Пакетное переименование файлов в totalcommander. ч.1
Потом нажимаем CTRL+M для группового переименовывания и выскочит вот такое окошко.
Пакетное переименование файлов в totalcommander
Пакетное переименование файлов в totalcommander. ч.2
В этом окне и производим все основные операции.
Как удалить часть текста во всех названиях файлов
Для удаление части текста введите то, что нужно удалить в поле Найти в блоке «Поиск и замена«. В поле Заменить на — то, на что нужно заменить. Например, нам нужно удалить адрес сайта bdseo.ru со всех файлов. Тогда в поле Найти вводим bdseo.ru, а поле Заменить на оставляем пустое.
Как заменить символы в названиях файлов через totalcommander
Для замены символов на какие-то буквы или цифры повторяем предыдущий блок. Только в поле Заменить на пишите то, на что заменяем. Например, заменяем в названиях файлов символы [, { на пробелы. В поле найти по очереди ставим эти символы, а в Заменить не забываем нажать пробел.

Справочник по групповому переименовыванию файлов через totalcommander

В программе тоталкомандер есть мощный встроенный функционал, и его частью как раз и является групповое переименовывание файлов. Вы можете задавать так называемую маску для массового редактирования.
[N] — вставьте этот код в поле имени для сохранения старого названия файла.
[f][N] — напишите вот так, если хотите чтобы все названия были с заглавной буквы.
[N1] — первый символ в названии файла. Можно использовать в маске, например, при замене символов.
[N2-4] — три символа из старого названия, с второго по четвертый.
[N3-] — все символы названия, начиная с третьей буквы.
[N-3] — третий символ с конца имени файла.
[N1,5] — пять символов после первой буквы.
[E] — расширение файла. (можно писать и в названии, если оно нужно.)
Счетчики. Хочется отдельно отметить полезную функцию счетчиков при переименовывании файлов.
Например, нам нужно проставить порядок файлов в начале названия или в конце (или в средине, использую маску).
[C:2] — простой счетчик, который нумерует файлы по очереди двухзначным числом. (01, 02…77,78)
[C:3] — тоже самое, только цифра уже трехзначная (001,002,003…)
[C1+1:2] — расширенный вариант счетчика. Первая единица — с какой цифры начинать, вторая единица — шаг счетчика, после двоеточия — двухзначное число. То есть эта конструкция будет добавлять 01,02,03… к каждому файлу по очереди. Если написать [C5+2:3], то счетчик начинает работать 005 с шагом 2 (007,009,011…)
Даты и время. Также в имя файла можно добавить [t] — время, [d] — дату, [D] — день, [M] — месяц, [Y] — год.
Если хотите конкретные примеры пакетного переименовывания файлов — не стесняйтесь, пишите!

вторник, 3 мая 2016 г.

AQA: Jmeter: Read Mails using JMeter Mail Reader Sampler

JMeter provides various options to handle email related scenarios in load testing activities. We already saw how we can send an email using JMeter in earlier post. This post now covers JMeter Mail Reader Sampler which can be used to receive emails from JMeter. This mail reading feature helps in number of scenarios like email verification, email confirmation etc.
We will use Mail Reader Sampler of JMeter to read an email. JavaMail API is needed to enable email functionality in JMeter. Download it from here and paste the JAR in JMeter’s lib folder. Now, perform below steps to configure JMeter Mail Reader Sampler.
  • Add a new Thread Group under Test Plan.
  • Right click on Thread Group and select Add–>Sampler–>Mail Reader Sampler. Once added, we need to provide IMAP/POP3 server details in sampler.
  • We will use GMail’s IMAP protocol for receiving an email in JMeter. Therefore, set Protocol value to ‘imaps’. Similarly enter ‘imap.googlemail.com’ and ‘993’ as server host and port values respectively.
  • Provide valid user name and password values.
  • We can also specify number mails we want to receive.
  • As GMail requires SSL, select ‘Use SSL’ radio button in Security Settings section.
  • After performing all above steps, your Mail Reader Sampler should be displayed as below image.JMeter Mail Reader Sampler
  • Run your test!

SEO: Эксперимент: как Яндекс и Google учитывают ключевые слова в URL

Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Дата пу...