Использование Selenium IDE со случайными значениями

Можно ли создавать тесты Selenium с помощью плагина Firefox, которые используют случайно сгенерированные значения для помощи в проведении регрессионных тестов?

Полная история: Я хотел бы помочь своим клиентам провести приемочное тестирование, предоставив им набор тестов, которые используют некоторые умения для создания случайных (или, по крайней мере, псевдослучайных) значений для базы данных. Одна из проблем с моими тестами Selenium IDE на данный момент заключается в том, что они имеют предопределенные значения, что делает некоторые типы тестирования проблематичными.

См. Этот пост (у меня работает!): stackoverflow.com/questions/52894485/…

Jonathan POIRIER 04.02.2020 17:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
46
1
87 577
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

Во-первых, Selenium IDE довольно ограничен, вам следует подумать о переходе на Selenium RC, который может управляться Java, Perl, Ruby или некоторыми другими языками.

Используя только Selenium IDE, вы можете встраивать выражения JavaScript для получения параметров команды. Вы должны иметь возможность вводить случайное число в текстовое поле, например:

type fieldName javascript{Math.floor(Math.random()*11)}

Обновлять: Вы можете определить вспомогательные функции в файле с именем «user-extensions.js». См. Ссылка на селен.

Я использую RC для собственного тестирования, но в этом случае я хотел бы дать моему клиенту несколько вспомогательных тестов, которые он может выполнить в своем браузере (без необходимости иметь копию среды разработки).

Toby Hede 02.10.2008 17:05

Просто подумал ... знаете ли вы, может ли Selenium вызывать функции Javascript, встроенные в страницу? Я мог бы создать несколько функций для генерации некоторых значений.

Toby Hede 02.10.2008 17:07

Я должен был использовать javascript в качестве значения в качестве отдельной команды. Я обнаружил, что не могу смешивать буквальный текст с javascript в одной команде. Следовательно, мой выглядел так: _ _ type fieldName Автоматически сгенерированный пользовательский typeKeys fieldName javascript {Math.floor (Math.random () * 11)}

Jared 12.01.2010 00:59

Я попытался поместить это прямо в текстовое поле «Значение» в Selenium IDE. Однако он просто поместил именно это в текстовое поле, а не случайное значение.

aron 11.04.2011 22:26

Арон, я обнаружил, что для этого было полезно использовать storeEval - см. stackoverflow.com/questions/2105001/…

somewhatoff 16.02.2012 18:28

У меня не получилось. Мне пришлось использовать формат javascript {code_goes_here}, который используется в другом ответе.

Aaron Kreider 24.08.2012 03:36

Теперь можно использовать командный сценарий, потому что: Предварительная обработка параметров предупреждения с использованием тега javascript {} устарела, используйте сценарий выполнения.

Paulo Tiago Mariano 13.07.2018 14:37

Вы можете добавить пользовательский exentions.js для получения случайных значений.

Скопируйте приведенный ниже код и сохраните его как расширение .js (randomgenerator.js) и добавьте его в основные расширения Selenium (SeleniumIDE -> Параметры ---> вкладка Общие)

Selenium.prototype.doRandomString = function( options, varName ) {

    var length = 8;
    var type   = 'alphanumeric';
    var o = options.split( '|' );
    for ( var i = 0 ; i < 2 ; i ++ ) {
        if ( o[i] && o[i].match( /^\d+$/ ) )
            length = o[i];

        if ( o[i] && o[i].match( /^(?:alpha)?(?:numeric)?$/ ) )
            type = o[i];
    }

    switch( type ) {
        case 'alpha'        : storedVars[ varName ] = randomAlpha( length ); break;
        case 'numeric'      : storedVars[ varName ] = randomNumeric( length ); break;
        case 'alphanumeric' : storedVars[ varName ] = randomAlphaNumeric( length ); break;
        default             : storedVars[ varName ] = randomAlphaNumeric( length );
    };
};

function randomNumeric ( length ) {
    return generateRandomString( length, '0123456789'.split( '' ) );
}

function randomAlpha ( length ) {
    var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
    return generateRandomString( length, alpha );
}

function randomAlphaNumeric ( length ) {
    var alphanumeric = '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
    return generateRandomString( length, alphanumeric );
}

function generateRandomString( length, chars ) {
    var string = '';
    for ( var i = 0 ; i < length ; i++ )
        string += chars[ Math.floor( Math.random() * chars.length ) ];
    return string;
}

Способ использования

Command                Target     Value
-----------           ---------   ----------
randomString           6           x
type                username       ${x}

Приведенный выше код генерирует строку из 6 символов и присваивает переменной x

Код в формате HTML выглядит следующим образом:

<tr>
    <td>randomString</td>
    <td>6</td>
    <td>x</td>
</tr>
<tr>
    <td>type</td>
    <td>username</td>
    <td>${x}</td>
</tr>

Примечание. Если вы получили следующую ошибку, убедитесь, что ваш файл user-extensions.js имеет формат ASCII, а не UTF-8. Failed to load user-extensions.js!files=C:\TestScripts\random_generator.jslineNumber=1error=SyntaxError: illegal character

lhoess 07.02.2012 03:04

(На основе ответа Тило) Вы можете смешивать литералы и случайные числа следующим образом:

javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}

Gmail позволяет автоматически все, что использует псевдонимы, например, [email protected], будет отправляться на ваш адрес [email protected].

Умножение * 11111 дает вам больше случайных значений, чем от 1 до 9 (в примере Thilo)

+1 за самый простой способ. (Это можно напрямую использовать в тестовых примерах HTML Selenium и т. д. В качестве аргумента команды type)

Jonik 28.03.2012 18:07

Я обнаружил, что это работает, только если у вас есть формат javascript {code_goes_here}, который используется в этом ответе.

Aaron Kreider 24.08.2012 03:36

Вот однострочное решение для генерации случайной строки букв в JS:

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")

Полезно для вставки в Selenium IDE.

куда вы это вставляете? В текстовое поле Значение?

aron 11.04.2011 22:23

Да, вставьте в поле значения.

afternoon 13.04.2011 15:39

Однострочник для случайного выбора из небольшого набора альтернатив:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}

Я немного улучшил функцию generateRandomString. Когда FF дает сбой, хорошо иметь возможность снова использовать то же случайное число.

Обычно он попросит вас ввести строку самостоятельно. Если вы ничего не вводите, он сгенерирует это.

function generateRandomString( length, chars ) { var string=prompt("Please today's random string",''); if (string == '') {for ( var i = 0 ; i < length ; i++ ) string += chars[ Math.floor( Math.random() * chars.length ) ]; return string;} else { return string;} }

Вот еще один вариант примера с Gmail:

<tr>
  <td>runScript</td>
  <td>emailRandom=document.getElementById('email');console.info(emailRandom.value);emailRandom.value=&quot;myEmail+&quot; + Math.floor(Math.random()*11111)+ &quot;@gmail.com&quot;;</td>
 <td></td>
</tr>

Selenium RC дает вам гораздо больше свободы, чем Selenium IDE, поскольку вы можете:

  • (1) Введите любое значение в определенное поле
  • (2) Выберите любое поле для тестирования в определенной HTML-форме.
  • (3) Выберите любой порядок выполнения / шаг для проверки определенного набора полей.

Вы спросили, как ввести случайное значение в поле с помощью Selenium IDE, другие люди ответили вам, как сгенерировать и ввести случайные значения в поле с помощью Selenium RC. Это попадает в фазу тестирования (1): «Введите любое значение в определенное поле».

Используя Selenium RC, вы можете легко выполнить этапы (2) и (3): тестирование любого поля на любом этапе выполнения, выполнив некоторое программирование на поддерживаемом языке, таком как Java, PHP, CSharp, Ruby, Perl, Python.

Ниже приведены шаги для выполнения этапов (2) и (3):

  • Создайте список своих полей HTML, чтобы вы могли легко их перебирать
  • Создайте случайную переменную для управления шагом, скажем RAND_STEP
  • Создайте случайную переменную для управления полем, скажем RAND_FIELD
  • [В конце концов, создайте случайную переменную для управления значением, введенным в определенное поле, скажем RAND_VALUE, если вы хотите выполнить этап (1)]
  • Теперь внутри вашего алгоритма фаззинга сначала перебирайте значения RAND_STEP, затем на каждой такой итерации перебирайте RAND_FIELD, а затем, наконец, перебирайте RAND_VALUE.

См. мой другой ответ о тестировании фаззинга, Selenium и тестировании белого / черного ящика.

Разбирая смысл сообщения RajendraChary выше, я потратил некоторое время на написание нового расширения Selenium IDE.

Мое расширение позволяет пользователю заполнять переменную текстом lorem ipsum. Есть несколько настраиваемых параметров, и это превращено в небольшую красивую команду. Вы можете сделать такие вещи, как «5 слов | wordcaps | nomarks», чтобы создать 5 слов lorem ipsum, все с заглавной буквы, без знаков препинания.

Я подробно объяснил установку и использование, а также предоставил полная кодовая база здесь

Если вы взглянете на код, вы поймете, как создать подобную функциональность.

Math.random может быть «достаточно хорошим», но на практике Случайный класс часто предпочтительнее Math.random (). Используя Math.random, числа, которые вы получаете, на самом деле могут быть не полностью случайными. Книга «Эффективное второе издание Java» рассматривает это в элементе № 47.

<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>

Хотели бы вы объяснить свой код или, возможно, немного отформатировать его, чтобы сделать его более читабельным?

ilter 22.04.2015 22:50

хороший трикс, мне нравится. .toString (36) хеширует число в текстовую строку, а с помощью .replace все, что не является алфавитом, заменяется пустой строкой. Substr сокращает длину. Недостаток: вы не можете генерировать строки длиннее 9? символы.

Dee 24.08.2015 12:06

Еще одно решение, которое я скопировал и вставил в сотни тестов:

<tr>
    <td>store</td>
    <td>javascript{var myDate = new Date(); myDate.getFullYear()+&quot;-&quot;+(myDate.getMonth()+1)+&quot;-&quot;+myDate.getDate()+&quot;-&quot;+myDate.getHours()+myDate.getMinutes()+myDate.getSeconds()+myDate.getMilliseconds();}</td>
    <td>S_Unique</td>
</tr>
<tr>
    <td>store</td>
    <td>Selenium Test InternalRefID-${S_Unique}</td>
    <td>UniqueInternalRefID</td>
</tr>
<tr>
    <td>store</td>
    <td>Selenium Test Title-${S_Unique}</td>
    <td>UniqueTitle</td>
</tr>
<tr>
    <td>store</td>
    <td>SeleniumEmail-${G_Unique}@myURL.com</td>
    <td>UniqueEmailAddress</td>
</tr>

Каждый набор тестов начинается с установки ряда переменных (если это большой набор, используйте отдельный файл, например Set_Variables.html). Затем эти переменные можно использовать в вашем наборе для установки, тестирования и удаления тестовых данных. А поскольку переменные используют дату, а не случайное число, вы можете отлаживать свой набор тестов, ища объекты, которые имеют общую дату.

Другие вопросы по теме