Войти с помощью github

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

Спасибо, Слава

Подскажите, можно ли тестировать ajax запросы в рамках spec.js. Как я понимаю, нужно дополнительно настроить сервер, который будет отвечать на запросы. Хотелось бы узнать как лучше его организовать

Разбираюсь с программным интерфейсом Gemini (https://ru.bem.info/tools/testing/gemini/api/). На базе тестов, написанных для запуска из консоли, всё работает — спасибо! Даже нет бага с записью "пустого" index.html на диск, который был из-за gulp-shell.

Теперь я хочу сделать так, чтобы тесты физически не располагались на диске. Можно их создавать динамически в том же месте в коде, в котором я запускаю genimi.test()?

Юзкейс мой такой: есть много однотипных проектов, которые я хотела бы тестировать. Им всем считай подходит один тест. Я хотела сделать проще для разработчиков этих проектов: предложить им gulp-плагин, внутри которого уже всё про Gemini зашито. Структура у проектов одинаковая, так что теоретически это возможно. И им не надо будет размещать непонятные для них файлы нигде.

Но мне не понятно, могу ли я сделать что-то вроде gemini.test(arrayOfSuits). И поскольку АПИ в разработке, я решила, что нелишне спросить.

/cc @arikon @SevInf

Не нашла в actions возможности подождать возникновения события. Нужно уметь ждать window.onload

Также кажется я это уже репортила (не помню)? Но в issues нет задач про event ни открытых ни закрытых.

/cc @arikon @SevInf

Я уже на 2х человеках попробовала вот эту ветку https://github.com/varya/varya.github.com/tree/features/gemini У них установлен только PhantomJS, и скриншоты нормально снимаются и тесты проходят (там только Chrome тесты) ChromeDriver или Selenium они не устанавливали, оба на Mac. Получается ChromeDriver не нужен?

После обновления PhantomJS с 1.9.8 до 2.0.0 перестали работать Gemini тесты. При этом сам запуск phantomjs --webdriver=4444 --disk-cache=true выдаёт тот же output что и раньше. И отдельно PhantomJS работает (проверяла на этом примере https://github.com/lvivski/phantomas) А при запуске Gemini ./node_modules/gemini/bin/gemini gather --root-url http://localhost:8000 gemini-test.js нет вообще никакого output. Как понять, что происходит?

Можно ли получить данные, к примеру массив, который будет составлен при помощи executeJS() и использовать его в основном теле теста?

Здравствуйте, сейчас изучил модуль gemini. Очень интересный и удобный, НО:

моя задача в том, чтобы сделать следующее - заходим на главную, жмем на поп-ап окно, логинимся, парсим несколько url и переходим по ним, где также делаем скрины.

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

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

mllnr@mllnr-osx2 ~/Desktop/vizor $ enb make specs 03:41:17.921 - build started 03:41:17.946 - [rebuild] [azaza/auth/auth.bemjson.js] file-provider 03:41:17.948 - [rebuild] [azaza/auth/auth.base.bemdecl.js] file-provider 03:41:17.953 - [rebuild] [azaza/auth/auth.levels] levels 03:41:17.955 - [rebuild] [azaza/auth/auth.base.files] files 03:41:17.955 - [rebuild] [azaza/auth/auth.base.dirs] files 03:41:17.957 - [rebuild] [azaza/auth/auth.bemjson.bemdecl.js] bemjson-to-bemdecl 03:41:17.958 - [rebuild] [azaza/auth/auth.spec-js.bemdecl.js] deps-by-tech-to-bemdecl 03:41:17.961 - [rebuild] [azaza/auth/auth.pure.spec.js] borschik-include-js 03:41:17.963 - [rebuild] [azaza/auth/auth.bemdecl.js] merge-deps 03:41:17.968 - [rebuild] [azaza/auth/auth.deps.js] deps-old 03:41:17.968 - [rebuild] [azaza/auth/auth.files] files 03:41:17.968 - [rebuild] [azaza/auth/auth.dirs] files 03:41:18.040 - [rebuild] [azaza/auth/auth.spec-js.bemhtml.bemdecl.js] deps-by-tech-to-bemdecl 03:41:18.040 - [rebuild] [azaza/auth/auth.js.bemhtml.bemdecl.js] deps-by-tech-to-bemdecl 03:41:18.042 - [rebuild] [azaza/auth/auth.css] css-stylus 03:41:18.043 - [rebuild] [azaza/auth/auth.source.browser.js] borschik-include-js 03:41:18.044 - [rebuild] [azaza/auth/auth.bemhtml.bemdecl.js] merge-bemdecl 03:41:18.046 - [rebuild] [azaza/auth/auth.bemhtml.deps.js] deps-old 03:41:18.046 - [rebuild] [azaza/auth/auth.bemhtml.files] files 03:41:18.046 - [rebuild] [azaza/auth/auth.bemhtml.dirs] files 03:41:18.056 - [rebuild] [azaza/auth/auth.browser.js] prepend-modules 03:41:18.394 - [rebuild] [azaza/auth/auth.bemhtml.js] bemhtml-old 03:41:18.396 - [rebuild] [azaza/auth/auth.html] html-from-bemjson 03:41:18.399 - [rebuild] [azaza/auth/auth.browser.bemhtml.js] bemhtml-old 03:41:18.400 - [rebuild] [azaza/auth/auth.pre.spec.js] file-merge 03:41:18.548 - [rebuild] [azaza/auth/auth.spec.js] borschik 03:41:27.107 - [spec] [azaza/auth/auth.html] Failed to start mocha: Init timeout Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///usr/local/lib/node_modules/enb-bem-specs/node_modules/mocha-phantomjs/lib/mocha-phantomjs.coffee. Domains, protocols and ports must match.

03:41:27.107 - build failed 03:41:27.107 - build failed Error: specs: 1 failing at /usr/local/lib/node_modules/enb-bem-specs/lib/runner.js:140:31 at Array.0 (/usr/local/lib/node_modules/enb-bem-specs/node_modules/vow/lib/vow.js:699:56) at Object.callFns as _onImmediate at processImmediate as _immediateCallback

Пол-ночи гугления не помогли( В интернетах пишут, что это баг phantomjs, но, вроде, уже пофикшеный, судя по issue в github'е. Может быть кто-нибудь сталкивался?

Я запускаю Gemini внутри gulp вот так:

.pipe(shell([
'./node_modules/gemini/bin/gemini test --reporter html --reporter flat ./tests/gemini-test.js'
])

shell — это плагин gulp-shell, но это не важно, потому что с run и exec то же самое.

Тесты проходят, в консоль есть вывод:

Total: 192 Passed: 136 Failed: 56 Skipped: 0

А вот для html-репорта показывает вот это: https://img-fotki.yandex.ru/get/3812/14441195.34/0_93389_de3023ad_orig При этом все нужные картинки сняты и диффы правильные.

Как мне это починить?

/cc @sevinf @arikon

https://img-fotki.yandex.ru/get/6708/14441195.34/0_93358_f3167daf_orig

Снимаю полный скриншот этой страницы http://varya.me/styleguide/#/section/2.3 Хочу проигнорировать первый столбец списка, в котором меняется цвет фона. Для этого я использую suite.ignoreElements('.recent-posts__item .badge'); Но это игнорирует только первый элемент, подходящий под селектор. Скриншот получается вот такой https://img-fotki.yandex.ru/get/6708/14441195.34/0_93358_f3167daf_orig Как проигнорировать все подобные элементы?

/cc @arikon @sevinf

Проблема странная, причины мне не понятны, описываю как есть.

Использую Gemini вместе с PhantomJS, так что может этого его проблема. Но поскольку PhantomJS в рекомендациях на странице — все равно надо обратить внимание.

В общем, если снимать скриншоты с ряда страниц, и снимать их не с localhost, а с удаленного сервера, то всегда проблемы со снятием 1го скриншота. От страницы не зависит — проблемы с любой страницей, если она первая в списке. Если снимать те же самые скриншоты с localhost, такой проблемы нет.

Проблема решается добавлением в список "ненужной" первой страницы и использованием на ней skip():

var gemini = require('gemini');

var examples = [
  '1.2-1',
  '1.1',
  '2.1'
];

var pages = [];
pages.push({
  'name': 'index',
  url: '/styleguide/#'
});
examples.forEach(function(example) {
  pages.push({
    'name': example,
    url: '/styleguide/#/section/' + example + '/fullscreen'
  });
});

pages.forEach(function(page) {

  gemini.suite(page.name, function(suite) {
      if (page.name === 'index') {
        suite.skip();
      }
      suite.setUrl(page.url)
          .setCaptureElements('body')
          .capture('plain', function(actions, find){

              actions.waitForElementToShow('shadow-dom', 7000);


          });
  });

});

/cc @arikon @sevinf

Делаю скриншоты нескольких страниц (условия одинаковые). Скриншоты делаются везде, кроме одной страницы. Чтобы понять почему, я бы хотела видеть картинку: что видно после timeout. Поскольку дебажить нормально пока нельзя, я хоть какую-то информацию из этого получу. Это как-то возможно сделать? /cc @arikon @sevinf

Пишу отдельным топиком, тк это уже подтема — написание тестов.

Меня интересует как сделать так, чтобы скриншот был снят только после какого-то события (например, на объекте window). Это важно для тестирование SPA, они не сразу отрисовываются, а из JavaScript.

Для простоты я пока не пользуюсь своим кастомным событием, а просто проверяю, работает ли с load. Я не нашла в документации возможности реагировать на события, поэтому пытаюсь пользоваться флагом и функциями executeJS и waitForJSCondition.

Текст теста вот такой:

var gemini = require('gemini');

var examples = [
  '1.1',
  '1.2-1',
  '2.1'
];

examples.forEach(function(example) {

  gemini.suite(example, function(suite) {
      suite.setUrl('/styleguide/#/section/' + example + '/fullscreen')
          .setCaptureElements('body')
          .capture('plain', function(actions, find){
              actions.executeJS(function(window) {

                  window.addEventListener('load', function() {
                      window.doTake = true;
                  });

              })
              actions.waitForJSCondition(function(window) {
                  return window.doTake;
              }, 3000);
          });
  });

});

Но ничего не получается, на снятии скриншотов получаю отлуп "Condition was not met in 3000ms".

Важно отметить, что если я просто пользуюсь actions.wait(3000), то все скриншоты снимаются как надо.

Теперь вопросы:

  • Правильно ли я делаю ожидание события на window или может быть есть какой-то более простой путь?
  • Почему не работает?
  • Как дебажить тесты? Я хочу писать console.log и видеть, что там происходит.

/cc @arikon @sevinf

Привет!

Продолжаю пытаться начать работать с Gemini, есть несколько вопросов. Я прочла https://ru.bem.info/forum/396/ но там вроде моих вопросов нет. Так что вот.

  1. Я хочу сравнивать интерфейс на моём localhost с продакшеном. Какова последовательность действий?
  2. Если запускать ./node_modules/gemini/bin/gemini test --reporter html tests/gemini-test.js, то ничего не происходит. Это от того что все тесты проходят? (Опция --flat показывает их пройденными). Как посмотреть html-отчет даже в случае пройденных тестов?
  3. Тот же тест через gemini-ui даёт такую картину: https://img-fotki.yandex.ru/get/34/14441195.34/0_92c3d_f85a7e6e_orig Мне не понятен этот интерфейс. Что с чем сравнивается? Я ожидала увидеть 2 скриншота для каждого браузера: эталонный и снятый сейчас. На кнопки я нажимала, меняется только фон. В gemini-report я просмотрела, что есть файлы chrome~ref.png, но в визуальном интерфейсе не понятно, где что.
  4. После того как я сняла идеальные скриншоты с продакшена, я хочу сравнить их с "испорченной" локальной копией. В конфиге я указала локальный сайт: https://github.com/varya/varya.github.com/blob/features/gemini/.gemini.yml И изменила фон у блока, теперь он выглядит вот так https://img-fotki.yandex.ru/get/4423/14441195.34/0_92c3e_54e46af6_orig То есть разница должна быть. Однако мой тест всё равно проходит. Что я делаю не так? Если что, вот ветка с моим сайтом: https://github.com/varya/varya.github.com/tree/features/gemini Чтобы запустить сайт, надо сделать docpad run. UPD: проблема в том, что после каждого изменения надо перезапускать PhantomJS
  5. Как попроще указать большой список страниц для тестирования, если на них не предполагается делать никаких действий?
  6. Можно ли писать исполняемый JavaScript в файлах тестов? Например, чтобы сформировать похожие тесты динамически.
  7. Как в конфиге указать, что нужно протестировать в нескольких windowSize?
  8. Зачем отдельно запускать phantomjs? Вот этот инструмент https://github.com/BBC-News/wraith не требует такого. Нельзя сделать так же?
  9. Если в Gemini нельзя сделать так чтобы не запускать PhantomJS в соседнем окне, то как это могу сделать я? Например, в своих gulp тасках. где я вызываю Gemini. В идеале я хочу, чтобы мои разработчики запускали в одном окне что-то вроде gulp gemini-test, и всё работало. Могу оформить в пакет :-)

Спасибо!

Привет!

Пробую Gemini. Сначала решила снять эталонные скриншоты со своего блога. Снимаю блок .social-ico, сайт http://varya.me/ Вот какие скриншоты он мне генерирует: https://img-fotki.yandex.ru/get/4702/14441195.33/0_92bd0_deca9d4f_orig

Почему на скриншоте блок горизонтальный? У меня же на сайте вертикально расположено.

Текст теста вот такой:

var gemini = require('gemini');

gemini.suite('varya', function(suite) {
    suite.setUrl('/')
        .setCaptureElements('.social-ico')
        .capture('plain');
});

Хочу использовать Gemini на Mac. Требуется установить Selenium Server. А он говорит

14:07:45.339 INFO - Driver provider org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
registration capabilities Capabilities [{ensureCleanSession=true, browserName=internet explorer, version=, platform=WINDOWS}] does not match the current platform MAC

Из документации: "Obviously the InternetExplorerDriver will only work on Windows!"

И что делать?

Добрый день,

Подскажите пожалуйста как производить навигацию между страницами. Так сложилось что мне сначала нужно зайти на url для авторизации и потом зайти на другой где собственно уже и производить тест. Пытался найти есть ли возможность работать в gemini с навигацией в браузере из коробки. Как я понял нету, т.к. в кол бэк возможно передать только actions и find/ Вторым вызовом suite.setUrl() поменять урл на другой не вышло. С нестед сьютами так же не выходит. Возможно я не так их применял ниже код:

parent.setUrl('first url') .setCaptureElements('element'); gemini.suite('first child', function (child) { //this suite captures same elements on different pages child.setUrl('secondUrl') .capture('plain'); Заранее спасибо за любую помощь.

Было хотели прикрутить enb-bem-specs

В общем полная беда. Templates только на bemhtml, а мы пользуемся BH - ибо он по мнению команды понятнее.

Потом, как оказалось он тянет за собой блок jquery - которого у нас просто нет, а еще хочет i-bem.

i-bem

В общем очень странные желания для сборки тестов и не понятно почему ему нужен так jquery, и i-bem?

Итог выглядит печально:

Так может кто уже получил опыт заведения unit-тестирования без i-bem, jquery?

Видится это примерно так:

В блоках файлы *.spec.js

В которых написаны тесты в BDD стиле.

Сборка происходит в отдельную папочку, и для сборки используются только те слои переопределения кои используются для development мода.

Есть довольно распространенный запрос тестировщиков к Gemini — возможность делать селекторы XPath. На мой скромный взгляд это очень просто реализовать, глядя например, на существующие query «методы» (sizzle && native), тем не менее хотелось бы услышать мнение, насколько это представляется возможным (в смысле реализации в виде плагина).

Привет.

У меня довольно абстрактно/утилитарный вопрос. Есть проект, responsive web design. 5 breakpoins. На них есть кнопки, вызывающие дейтпикер. Задача — провести визуальное тестирование страниц на наборе ширин viewport'а. Чего я ищу, по сути — одного теста, но на наборе ширин, и с выполнением "before each" определенных взаимодествий.

Подскажите пожалуйста, возможно ли это с помощью gemini, и если да — как.

Подскажите что почитать/посмотреть чтобы начать писать тесты на блоки. В первую очередь интересует browser.js

Хочу проверить свой код, на сколько я по стандарту сделал все, существует ли вадитор такой?

https://github.com/krll-k/vk.com

P.S. не использовал никаких bem-tools, скорее всего напишу свой bem-tools, имхо!

Hi guys,

I am looking for tool for visual testing. Project's automation language is php. I've heard about gemini on selenium camp as good one for visual testing. So could you answer on next questions:

  1. Is there any option out of the box to use it with web driver on php ?
  2. If no then what web driver you are using with Gemini
  3. Is it possible to connect it with Selenium grid
  4. I didn't see in example any assertion so how can I use it with CI(Bamboo for example) and see results like pass/fail. Is this plugin solve the issue ? - Plugin for Gemini which enables reporting test result
  5. What locators strategy does it use ? all or only css
  6. Did you share you automation framework somewhere(I mean page object/html object etc)
  7. Are you using it in Yandex for UI regression ? :))
  8. How to use it for visual testing on mobile devices
  9. How to exclude some object from comparing - Example whole body without video player.
  10. Is there any issues with iframes
  11. Are you using GraphicsMagick for image processing ?
  12. Am I right that all I need is give the locator on element I do not need to write what properties to compare like in Web Driver
  13. If test created for chrome can I reuse it for firefox ?I mean screenshots
  14. If I have design of element can I use it in the tests as baseline?
  15. Is there solution out of box for viewport I mean if content exceeds screen size will gemeni auto scroll it and glue it in one ?
  16. Is there any option for comparing level adjustmant - like pixel to pixel/ lower/ the lowest etc.
  17. Is there option to give coordinates instead of locator to compare

Currently that it, thanks for your answers in advance

Здравствуйте, сейчас, когда я задаю ignoreElements('.my-class') на скриншоте Gemini закрашивается черным только первый найденный элемент, а как добавлять в игнор несколько элементов с одним селектором?

Всем привет!

Недавно взялся за изучение AngularJS по урокам с официального сайта, естественно пытаясь применить полученные знания в контексте БЭМ-методологии :) С интеграцией самого ангуляра в БЭМ-проект все более-менее понятно, а как обстоят дела с тестированием?

Погуглив по данному вопросу, наткнулся на доклад Александра Тармолова про юнит-тестирование в БЭМ, но так и не понял как настроить окружение enb/bem-tools для сборки и запуска тестов.

проверить работу