Quantcast
Channel: Selenium - Functional Testing: новые темы
Viewing all 702 articles
Browse latest View live

WebdriverIO + Google Dropdown Autocomplete (Places Geocoder).


Использование веб-камеры в seleinium автотестах

$
0
0

Всем привет! Есть приложение, которое идентифицирует человека по лицу, то есть лицо снимают на веб камеру, на сервер отправляются фотографии с этого видео, вобщем как то так. Таких проверок несколько в одном тесте.
Немного погуглил и нашёл, что можно сделать что то типа такого:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--use-fake-device-for-media-stream")
chrome_options.add_argument("--use-file-for-fake-video-capture=./video1.y4m")
chrome_options.add_experimental_option("prefs", {
"profile.default_content_setting_values.media_stream_camera": 1
})

То есть передать параметры опций браузера фэйковую веб камеру и видео, вместо съёмки живого человека.
Вопрос: в тесте мне надо как то подставлять разные видео, взависимости от того, что попросит приложение. Можно ли как то во время теста подставлять разные видео? Например если он просит лицо 1, мне нужно подставить файл video1.y4m, если нужно лицо5, то нужно передавать video5.y4m и это всегда генерится рандомно. Сорри если объяснил немного сумбурно. Может кто сталкивался с такой проблемой?

Генерация случайной почты

$
0
0

Добрый день

Пытаюсь сделать тест с использованием случайной почты в поле авторизации

В поле значения для ввода размещаю javascript код вот так

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

Выполняю сценарий и получаю ошибку на этой строке:

 

 

type on id=username with value javascript{"test+" + Math.floor(Math.random()*11111) + "@gmail.com";} Failed:
Cannot read property 'code' of null
 

 

Использую расширение для Chrome Selenium IDE v.3.11.1

Версия Chrome  75.0.3770.100 (Официальная сборка), (64 бит)

 

Помогите пожалуйста разобраться, в чем может быть проблема?

 

 

 

 

Где инициализировать браузер в Cucumber-тестах

$
0
0

Добрый день.

в Cucumber (в отличие от Junit) можно задать теги-хуки @Before или @After только единожды

Т.е. если в Junit такие теги выполняются в каждом классе с тестами, то в Cucumber их надо задать в отдельном классе с хуками только один раз и не нужно задавать в классах с реализацией шагов (например есть N кол-во классов со степами-тестами Cucumber)

В связи с этим у меня вопрос - а где тогда реализовывать запуск вебдрайвера и инициализацию Page object-страниц?

Если реализовывать его в хуках, непонятно как использовать драйвер и инициализированные page objects в тестах Given/When/Then в классах с шагами.

 

Какое типовое решение?

Как схитрить, чтобы не ждать подолгу полный проход теста по странице

$
0
0

Всем привет.

 

Пишу автотест на питоне используя webdriver. Понятное дело, что автотест не сразу работает как надо, поэтому приходится десять тыщ раз его переписывать и перезапускать. И при каждом перезапуске приходиться ждать подолгу пока тест пробежится по всем этапам (логин, проход по меню, тайминги чтоб элемент нужный прогрузился), и это еще простой тест. А ведь есть куда более долгие и сложные.

 

Вопрос: как так сделать, чтобы сартовать тест не с самого начала, а с последнего удачного теста, например? Я честно гуглил, но ничего внятного не нашел.

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

$
0
0

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

Не удается "добраться" до элемента по индексу , полученного методом FindElements. Лист вроде-бы наполняется , по крайней мере распечатывается в цикле, но при попытке обратиться к элементу по индексу, выдает сообщение о несоответствии индекса размеру массива. Размер массива почему-то равен 1 , хотя распечатывается 6 элементов. В чем может быть причина такого несоответствия?

 

Dim DR As IWebDriver
        DR = New ChromeDriver()
        DR.Navigate.GoToUrl("https://www.fonbet.ru")
        DR.Manage.Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(25))
        Dim Elm_0, Elm_1, Elm_2, Elm_3 As IWebElement
        Dim Lst As List(Of IWebElement)
        Lst = DR.FindElements(By.CssSelector("menu.menu")).ToList
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim prnt As Graphics = Me.CreateGraphics
        Dim FN As New Font("ARIAL", 10, FontStyle.Regular)
        Dim i As Integer
        i = 0
        For Each p As IWebElement In Lst
            prnt.DrawString(p.Text, FN, Brushes.Black, 10, 50 + 20 * i)
            i = i + 1
        Next
        prnt.DrawString(Lst.Count, FN, Brushes.Black, 10, 30)
        ''''''''''''''''''''''''''''''''''''''''''
        Elm_3 = Lst(4)
        Elm_3.Click()

 

Прикрепленные изображения

  • Img_1.jpg

Непонятки с tags в запускальщике Cucumber

$
0
0

Добрый день. Использую Cucumber. Имею два features-файла, которые начинаются так:

 

Первый файл: 

 

@alltests @campaign

Feature: work with campaigns

 

Второй файл:

 

@alltests @mailing
Feature: work with mailings

 

 

В запускальщике Cucumber в tags указываю их теги:


import cucumber.api.CucumberOptions;
import cucumber.api.SnippetType;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources/features",
glue = "org.altarix.iszhs",
tags = {"@campaign", "@mailing"},
snippets = SnippetType.CAMELCASE
)
public class cucumberTests {
}

 

 

Запускаю, получаю:

 

None of the features at [src/test/resources/features] matched the filters: [@campaign, @mailing]
0 Scenarios
0 Steps
0m0,000s
 
Т.е. ничего не выполняется
 
Но стоит мне добавить ~ к любой из аннотаций (например, "~@campaign" или "~@mailing", как запускаются тесты не отмеченной ~ аннотации. Т.е. если я сделал так:
tags = {"~@campaign""@mailing"},
 
То запустятся тесты из второго feature-файла (помеченные как @mailing)
 
А если сделаю наоборот:
 
tags = {"@campaign""~@mailing"},
 
То запустятся тесты из первого feature-файла (помеченные аннотацией @campaign)

 

 

В чём дело? Почему не работают оба варианта tags = {"@campaign""@mailing"} ?

Тулза для отслеживания изменений в HTML

$
0
0

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


Apache poi - добавление новой страницы в существующий файл xlsx

$
0
0

Есть сценарий для тестирования страницы со списком товаров. 
В течении этого сценария данные с web страницы в виде двух списков List<String> с названием и ценой должны дважды передаваться в файл xlsx, каждый раз - на новый лист.
Проблема в том, что файл xlsx после второго вызова перезаписывается, то есть лист SmartsPopular исчезает, а вместо него появляется Smarts 3-6 K.

В чём здесь может быть ошибка?

 

public class Script

    @Test
    public void script3() throws IOException {
    openSmartphones();
    moreGoodsClick();
    moreGoodsClick();
 
    FileExcelCreating.main("SmartsPopular", goodsNamesListCreating, goodsPricesListCreating);
 
    moreGoodsClick();
    moreGoodsClick();
 
    FileExcelCreating.main("Smarts 3-6 K", goodsNamesListCreating, goodsPricesListCreating);
---------------------------------------------------------------------------------------------------------
public class FileExcelCreating
    public static void main(String sheetName, List<String> goodsNames, List<String> goodsPrices) throws IOException {
 
        Workbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet(sheetName);
 
        Row r0 = sheet.createRow(0);
        Cell c0 = r0.createCell(0);
        c0.setCellValue("Название");
        Cell c1 = r0.createCell(1);
        c1.setCellValue("Цена");
 
        Row a;
 
        List<Integer> goodsPricesInt = new ArrayList<>();
        for(String s : goodsPrices) goodsPricesInt.add(Integer.valueOf(s));
 

        for (int i = 0; i < goodsNames.size(); i++) {
            a = sheet.createRow(i+1);
            String name = goodsNames.get(i);
            a.createCell(0).setCellValue(name);
        }
 
        for (int j = 0; j < goodsPricesInt.size(); j++) {
            a = sheet.getRow(j+1);
            Integer price = goodsPricesInt.get(j);
            a.createCell(1).setCellValue(price);
        }
 
        sheet.setAutoFilter(CellRangeAddress.valueOf("A1:B" + (goodsPricesInt.size())));
 
        FileOutputStream outputStream = new FileOutputStream  ("/FilesTXT/Smartphones.xlsx");
 
        wb.write(outputStream);
        outputStream.close();
    }

как продолжить выполнение скрипта, если 1 тест кейс упал

$
0
0

Всем доброго времени суток!

 

Есть Unittest скрипт на Питоне, в нем 5 тест кейсов, каждый проверяет свой функционал по общей тематике. Так вот если 1 тест кейс упадет, например не найдет локатор или еще что, а может быть поймает баг. то весь скрипт падает.

Есть ли какая библиотека или способ, заставить скрипт выполняться дальше, но после выдать результат, что мол Тест кейс 01 упал, а остальные успешны?

Selenium Grid + Appium + Python

$
0
0

Добрый день. Пытаюсь настроить параллельные автотесты приложения на нескольких андроид устройствах. 

Для каждого из устройств создал json файл вида:

{ "capabilities":
[
{
"deviceName": "LGM700dcbaf29c",
"version":"8.1.0",
"maxInstances": 10,
"platform":"ANDROID"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"maxSession": 10,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}

Запускаю хаб, и отдельные инстансы Аппиума командой вида appium -a 127.0.0.1 -p 4723 -bp 2253 -U LGM700dcbaf29c --nodeconfig /home/test/LGM700dcbaf29c.json

 

В Environment.py прописал следующее:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def before_feature(context, feature):
caps = DesiredCapabilities.ANDROID.copy()
caps["app"] = WD + "/apps/" + AppName
caps["appPackage"] = "ru.messenger.android"
caps["appActivity"] = "ru.messenger.android.activity.main.StartActivity"
caps["newCommandTimeout"] = "1000"
context.driver = webdriver.Remote(
command_executor="http://127.0.0.1:4444/wd/hub",
desired_capabilities=caps
)

Но тут появляется проблема. DesiredCapabilities.ANDROID отдает только {'browserName': 'android', 'version': '', 'platform': 'ANDROID'}. Мне же для подключения еще нужен deviceName. В интернете советуют добавлять deviceName в caps вручную, так же как добавляются и остальные параметры, но тогда как запустить тест на двух устройствах, если вручную прописан deviceName одного из них. Я думал что можно каким-то образом вытаскивать deviceName из json файла который я указываю при запуске инстанса, но DesiredCapabilities.ANDROID.copy() видимо мне в этом не поможет. Есть какой-то вариант? 

модальное окно закрывается случайный образом при клике на его элементы

$
0
0

Добрый день,

Webdriver  Java

 

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

 

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

К элементам таблицы обращаюсь через xpath,  примерно так "div[@class='ant-modal-content']//thead//th[1]//input".

 

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

 

Кто нибудь сталкивался с таким ?

 

Порядок запуска тестов

$
0
0

   Добрый день.

 

У нас есть тесты с Selenium WebDriver, написанные на C# с использованием NUnit и SpecFlow. Хочется спросить вот о чем: есть ли какие-либо best practices для управления порядком запуска тестов в таком окружении? В проекте тесты находятся в *.cs файлах, и их запуск происходит в алфавитном порядке названий этих файлов, что не соответствует желаемому порядку запуска. Можно переименовать файлы, добавив в начало числовые индексы, например 01_CompanyTesting.cs, 02_ResellerTesting.cs и т.д., но может быть есть более разумный вариант?

 

Спасибо,

Evaiz

Возможно ли подключиться к существующей сессии открытой в Opera

$
0
0

Есть открытый браузер Opera. Выполнен некий набор действий который не автоматизировать. 

Дальше необходимо  выполнить набор достаточно тупых и однообразных действий.

 

Вопрос:

возможно ли Selenium`ом подключиться не обрывая сессии и соответственно продолжить дальше деятельность?

Использую: Opera Версия:63., Python 3.7, 
 

 

Как прокрутить страницу используя selenium?

$
0
0
Здравствуйте!
Многие сайт, например фб и вк испоkьзуют подзагрузку страницы при движении курсора вниз. Как можно
 двигать курсор на selenium?

Как получить исходный код страницы после ajax используя selenium ?

$
0
0
Здравствуйте!
Как получить исходный код страницы понятно. Но многие страницы меняют его после выполнения js скриптов, часто после 
ajax.  Можно получить текущий исходный код используя средства разработчика в браузере.
Как получить исходный код страницы после выполнения скриптов используя selenium?

Selenium. Chromedriver. user-data-dir. Java. Как хранить Cookies?

$
0
0

Версия chrome: Версия 75.0.3770.100 (Официальная сборка), (64 бит)

 

Работаю с Chromedriver Headless. Мне нужно хранить где-то куки, что бы после закрытия браузера они не терялись. Пробовал использовать chrome с параметром user-data-dir. Все вроде нормально, создает файлы с настройками и куками в указанной папке и пока сервер работает он берет оттуда куки и записывает их. Но после перезагрузки драйвера он перезаписывает файлы и уже не видит старые куки и создает новые. 

 

 

 

Для проверки создал на локальном сервере вот такой скрипт ( http://test-cookies.local/test.php )

<?php setcookie ("TestCookie", 'COOKIES',time()+3600); ?>
<title>КУКИ : <?php print $_COOKIE['TestCookie']; ?> </title>

Выполняю в selenium (java) вот такой код и вижу что куки он не загружает после перезагрузки

System.setProperty("webdriver.chrome.driver", "drivers\\chromedriver.exe");

ChromeOptions options = new ChromeOptions();

options.addArguments("--user-data-dir=c:\\Users\\lexa\\IdeaProjects\\project\\user1\\");

options.setHeadless(true);

WebDriver driver = new ChromeDriver(options);

driver.get("http://test-cookies.local/test.php");

System.out.println(driver.getTitle());

driver.quit();

Подскажите, может есть какие-нибудь другие решения, что бы куки сохранялись или может я что то не так делаю?

 

 

 

 

как работает getPageSource в selenium ide?

$
0
0
Здравствуйте!
Как получить исходный код страницы понятно. Но многие страницы меняют его после выполнения js скриптов, часто после 
ajax.  D selenium команда getPageSource в некоторых драйверах дает загруженный еод а некоторые полсе изменения 
скриптами. Знаетет ли вы как getPageSource работает в selenium ide?

C# Не удается добавить расширения для Mozilla Firefox

$
0
0

Пытаюсь добавить расширение таким образом:

var fireDriverService = FirefoxDriverService.CreateDefaultService();
var profileManager = new FirefoxProfileManager();
FirefoxOptions option = new FirefoxOptions();
option.Profile = profileManager.GetProfile("default");
option.Profile.AddExtension(@"anticaptcha.xpi");
//option.Profile.SetPreference("extensions","99.9");
Browser2 = new FirefoxDriver(fireDriverService, option);

При запуске выдает на строке 

Browser2 = new FirefoxDriver(fireDriverService, option);

Следующую ошибку:

 

System.ArgumentOutOfRangeException: "Параметры Year, Month и Day описывают непредставимое значение DateTime."
 
 
При удалении добавления расширения, а именно строчки
option.Profile.AddExtension(@"anticaptcha.xpi");

Ошибка пропадает.

 

Так вот, я не понимаю о какой дате идет речь и как исправить эту ошибку. Думал, что необходимо добавить определенные настройки для расширения, например, вот так:

//option.Profile.SetPreference("extensions","99.9");

В файле расширения (вроде .manifest или около того), безусловно, есть определенные поля, которые можно заполнить, но какие именно нужно заполнять поля и как именно вообще не понимаю...

 

Не взаимодействует со вторым элементом из списка с одинаковыми class

$
0
0

На странице http://todomvc.com/examples/backbone/#/ пытаюсь написать сценарий который удаляет второй из двух введённых в список элементов.

Я использую связку Selenium+Java.

 

При использовании  driver.findElementByClassName("destroy").click();  - клик срабатывает, но удаляется первый пункт, а нужно удалить второй

При использовании  driver.findElementsByClassName("destroy").get(1).click();  - появляется ошибка element not interactable
При использовании  driver.findElementByXPath("//section/ul/li[2]/div/button").click();  - тоже появляется ошибка element not interactable
 
Фактически, кнопка для удаления появляется после того, как навести на неё курсор.
Но использование 
Actions cursorOnDestroyButton = new Actions(driver);
List <WebElement> destroyList = driver.findElements(By.className("destroy"));
cursorOnDestroyButton.moveToElement(destroyList.get(1)).click();
тоже не помогло.
В таком случае никаких ошибок не появляется, но и с элементами ничего не происходит, не удаляется вообще ни первый ни второй пункт.
 

Подскажите, в чём здесь ошибка и как такое реализовать?

 

Viewing all 702 articles
Browse latest View live