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

Как получить логи при связке maven+junit+selenuim+java

$
0
0

Здравствуйте, подскажите, наковырял я тестов, с помощью maven собираю/запускаю нужный мне набор тестов, все прогоняется и выводит результат:


Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.891 sec

Это хорошо, что все хорошо) но когда я писал тесты в IntelliJ Idea выводил сообщение типа, если валидация сработало ОК, если нет BAD и название самой проверки.
Могу ли я как то собирая/запуская через maven выводить такое же или как подтянуть это из джавы?
 

Выбор языка для автоматизации тестов

$
0
0
Насколько критичный вопрос выбора языка для автоматизации тестов?
Есть ли какие-то советы, в какой ситуации стоит выбрать именно этот, а не другой язык? Может быть, в определенных областях требуются конкретные языки?
 
Тяжело ли перейти к другому языку, если научишься на одном? 
Есть ли разница, на каком языке писать тесты, ведь язык тестов и самого приложения никак не взаимосвязаны?
почему в требованиях часто указывают конкретный язык, который хотят от автоматизатора?
 
Почему не распространен язык JavaScript для автоматизации? На мой взгляд, прекрасный выбор. Фреймворки для него почему-то есть, а отдельного течения (как и курса на портале) нет, с чем это связано?

Запуск Chromium при помощи Selenium

$
0
0

Только учусь работе с Селениум, но появился вопрос, "Как запустить Chromium,а не чистый GoogleChrome/MozillaFirefox и т.д."?
Вот так выглядит мой проект. Пока что я просто запускаю браузер и перехожу на официальный сайт Selenium'a.

er4.jpg

Драйвера, для браузеров и путь к ним. FYI:  chromedriver - для запуска GoogleChrome, а geckodriver - для запуска MozillaFirefox

er3.jpg

 

Если возможно запустить Chromium при помощи Java, то как это сделать?  В интернете не смог найти драйвера, для Chromium

Проверка на наличие атрибута используя Фреймворк Serinity

$
0
0

Добрый день. Я новичок в Serenity. Столкнулся с такой проблемой. Мне нужно сделать проверку на появление атрибута в классе после клика на кнопку. Делаю сравнение по значению атрибута. В консоли все проходит правильно. Но в отчете всегда тест прошел успешно не зависимо от результата. Прошу подсказать что я не так делаю?

Вот скрины кода:

1. Класс с методом

public String elementHasClass() {
        return  find (articlePageLike).getAttribute ("class");

    } 

2. Класс со степами где я провожу проверку

@Step
    public void atribut(){
        assertThat (articlePage.elementHasClass ().contains ("123"));
    }

3. Скрин консоли где показано что атрибут находится правильно  и проверка выдает false

http://joxi.ru/8And4qqHzqO8Om

4. Скрин отчета где показано что все прошло успешно без ошибок, но должна быть ошибка

http://joxi.ru/GrqZQppC4NZVnm

Добавить в цикл переменну и это значение в sendkeys

$
0
0

Привет друзья!

Изучаю Джаву и селениум, подскажите пожалуйста, хочу в поле логина и пароля ввести значения от -1 до 10000 например

 делаю такой код - не получается

 

подскажите пожалуйста!Мне же надо проверить все значения на длину и граничные значения

public void userLogin() {

for (int storedVal = 0; storedVal < 3; storedVal++)
String storedVal = RandomStringUtils.random(10, 0, 9, false, true, "1234578752".toCharArray());
System.out.println(storedVal);

WebElement loginField = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[2]/aside/div/div[2]/div[2]/form/div[1]/div/input"));
loginField.sendKeys(storedVal);
WebElement passwordField = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[2]/aside/div/div[2]/div[2]/form/div[2]/div/input"));
passwordField.sendKeys("parol");
WebElement loginButton = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div[2]/aside/div/div[2]/div[2]/form/div[3]/button"));
loginButton.click();

 

Локатор внутри iframe находится только при пошаговой отладке - куда ко

$
0
0

День добрый, коллеги!

 

Удивительное рядом. Всю голову сломал.

Задача - понажимать кнопочки во всплывающем поверх основного окне - QATool, а конкретно нажать на правую верхнюю кнопку (Settings).

Всё это добро лежит во фрейме, см. скриншот. 

 

Screenshot-191-15-02-19_LI.jpg

 

Что я делаю: 

1. Нахожу фрейм, переключаюсь в него.

2. Ищу внутри него элемент по id.

3. Кликаю на элемент. 

4. PROFIT

WebElement Qatool=wait.until(presenceOfElementLocated(By.xpath("//*[@id='dptIframe']")));
        
driver.switchTo().frame(Qatool); //переключились во фрейм 

WebElement settings = driver.findElement(By.id("maxypt-tab-bttn-settings"));

settings.click();

Вопрос в следующем - при отладке в IDEA, когда прохожу пошагово этот блок, всё хорошо, а вот при автоматизированном запуске, падает на 

WebElement settings = driver.findElement(By.id("maxypt-tab-bttn-settings"));

c  ошибкой NoSuchElementException

 

В порядке решения проблемы, пробовал следующее:

1. Менял локаторы, методы - один результат - пошагово проходит, автоматом - падает.

2. Пробовал переключаться на driver.switchTo().defaultContent()

3. Пробовал использовать явные ожидания.

4. Пробовал расставлять паузы.

 

Результат один - по шагам работает, автоматически - нет. 

Может кто сталкивался с такой бедой?

 

 

 

Actions работает только c FirefoxDriver

$
0
0

Имею следующий простенький код, который выполняется только с Gecko (Firefox) driver.

 

Тот же код с любым другим драйвером кидает exception:

 

Exception in thread "main" java.lang.AbstractMethodError: org.openqa.selenium.remote.RemoteWebElement.getCoordinates()Lorg/openqa/selenium/interactions/Coordinates;
at org.openqa.selenium.interactions.internal.MouseAction.getActionLocation(MouseAction.java:69)
at org.openqa.selenium.interactions.MoveMouseAction.perform(MoveMouseAction.java:42)
at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:34)
at org.openqa.selenium.interactions.Actions$BuiltAction.perform(Actions.java:642)
at utils.CheckActions.main(CheckActions.java:36)
 
Код:
 
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;


import java.util.concurrent.TimeUnit;

public class CheckActions {
public static void main(String[] args) {

// System.setProperty("webdriver.gecko.driver", "geckodriver.exe");
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");


// WebDriver driver = new FirefoxDriver();

WebDriver driver = new ChromeDriver();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();

driver.get("http://google.com");

Actions action = new Actions(driver);

WebElement field = driver.findElement(By.xpath("//input[@name='q']"));

//action.sendKeys(field, "BLABLABLA").build().perform();
action.moveToElement(field).build().perform();

driver.close();
}
}

Переключение окон браузера используя framework Serinity

$
0
0

Здравствуйте. Подскажите пожалуйста кто сталкивался как можно переключить окна в браузере используя Serenity. Пробовал swich to  и getWindowHandles. Эти методы не работают.


selenium.common.exceptions.StaleElementReferenceException:

$
0
0

Пытаюсь  написать парсер на питоне, используя селениум. Суть парсера в том, что нужно сначал повытаскивать url-адреса (их около 50 000). А потом уже парсить данные из каждой страницы.

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

1. Список открывается при наведении на него мышью.

2. Для того, чтобы получить url каждого пункта я навожу на него, кликаю на пункт меню, вытаскиваю url.

2.1. Каждый пункт списка состоит из подпунктов. Они видны (просто в зависимости от выбранного меню у них меняется id). Я  кликаю по ним, вытаскиваю url (без наведения), после чего навожу на список и перехожу к следующему пункту. И так цикл повторяется.

3. Изначльно список состоит из 6 пунктов (по дефолту в списке стоит значение Default). Но при клике на пункт меню он исчезает из списка и соответственно их там становится 5.

 

Вот мой код

    #Пункты из выпадающего меню
    a_list_text = []
    li_more = ul_nav.find_element_by_css_selector('li.r.more')
    ActionChains(driver).move_to_element(li_more).perform()
    a_more_list = li_more.find_elements_by_css_selector('div > div > p > a')
    
    #Добавляем пункты в список
    for a_more in a_more_list:
        a_list_text.append(a_more.text)

    #Проходим по пунктам
    for a in a_list_text:
        li_more = ul_nav.find_element_by_css_selector('li.r.more')
        ActionChains(driver).move_to_element(li_more).perform()
        #Создаём ещё один список с пунктами из меню
        a_more_list = li_more.find_elements_by_css_selector('div > div > p > a')

        for a_more_ in a_more_list:
            #Так как пункты в списке меняются местами, сверяем равен ли текущий пункт выбранному. Если да, запускаем цикл, если нет - переходим к следкющему
            if a == a_more_.text:
                a_more_.click()
                # time.sleep(2)
                print(driver.current_url)

                #Вытаскиваем подпункты
                more_sub_ul_nav = driver.find_element_by_css_selector("ul.sub-menu.subactive[style = 'display: block;']")
                more_sub_a_more_list = more_sub_ul_nav.find_elements_by_css_selector('li > a')
                
                #Проходим по подпунктам (они видны, без наведения)
                for more_sub_a_more in more_sub_a_more_list:
                    more_sub_a_more.click()
                    # time.sleep(2)
                    print(driver.current_url)

                #Когда прошли по все подпунктам - обрываем цикл и переходим к следующему пункту
                break
Traceback (most recent call last):
  File "all_links.py", line 90, in <module>
    count += parse(driver, 'https://****' + link_match.get("href"), count)
  File "all_links.py", line 48, in parse
    a_list_text.append(a_more.text)
  File "/home/m0nte-cr1st0/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 76, in text
    return self._execute(Command.GET_ELEMENT_TEXT)['value']
  File "/home/m0nte-cr1st0/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "/home/m0nte-cr1st0/.local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/m0nte-cr1st0/.local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <a href=""> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

В принципе, можно как-то try/except прикрутить, наверное. Я пробовал, но было 2 проблемы:

1. "Съедались" некоторые ссылки (видимо, неверно except настроил)

2. Всё-равно вылетала ошибка спустя какое-то время (видимо, неверно try вставил)

 

Уже который день пытаюсь побороть проблему - не получается. Может, кто-то что-то подскажет?.. Не знаю, куда ещё обратиться(

https://imgur.com/SUiVgiS

https://imgur.com/99Wqghy

Protractor. Click if exists

$
0
0

Подскажите как вообще проверить что элемент видим. То есть я хочу кликнуть на один елемент если он видим, а если нет то на другой. selenium control flow: false. То есть без промизов.

FindElements

$
0
0
Подскажите, как получить все значения в переменную или в таблицу? Использую
project.Variables["test"].Value = driver.FindElementByXPath("//android.widget.TextView[contains(@resource-id, 'mobi.chat:id/count_members')]").GetAttribute("text");
Но в переменную кладется только первое значение из 10ти. Знаю что есть FindElements, но подставлением буквы, проблема не решается. Понимаю что задача простая, но руки у меня кривые.
Скрытый текст

Selenium и ввод в окна приложений windows

$
0
0

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

Необходимо сделать проверку на сайте входа через сертификат (через cryptopro):

- жму на странице "авторизация через сертификат"

- появляется окно от заранее установленной программы cryptopro (окно не от браузера, а от другой программы) с предложением ввести пароль

- после успешного ввода пароля - происходит вход на сайте.

 

Впорос: возможно ли как то ввести пароль в данное окно от сторонней программы?

Если не через селениум, то есть ли какие то программы, которые могут искать заголовки окон и вводить текст в поля?

Спасибо за любые подсказки.

PATH Ubuntu 18.04

$
0
0
18.04 убунта, 65.0.2 файрвофкс. Никак не могу увидеть его (фф) в PATH.
При выполнении кода получаю ошибку "RuntimeError: Could not find firefox in your system PATH. Please specify the firefox binary location or install firefox"
 
При этом:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/firefox
 
whereis firefox
firefox: /usr/lib/firefox /usr/local/firefox
 
Пробовал прописывать фф и в ~/.bashrc и в /etc/environment (где, собственно, сейчас). На просторах гугла натыкался на вариант, что в подобной беде помогало более точное указание (usr/local/firefox/firefox). Пробовал, не помогает 
Подскажите, пожалуйста, почему не видит? Не понимаю

Как собрать все ссылки и ходить по ним

$
0
0

Здравствуйте.
Как собрать все нужные мне ссылки(class) с определенного сайта, а после поочередно переходить на них и делать определенные действия!?
Голову уже сломал!!!

Increment переменной в Selenium IDE

$
0
0

Привет всем! Начал изучать Selenium IDE и столкнулся с такой проблемой. Нужно в цикле while увеличить переменную, чтобы цикл был конечным. Но ничего не получается. Уже много вариантов перепробовал, но пока что ни один из  них не подошёл. Последний вариант, пробовал такой

 

store| 1 | i

store| javascript{Math.floor(Math.random()*${i})} | i

echo| ${i}

 

Переменная i упорно не хочет менять значение


Удаление coockie

$
0
0

Всем привет! Можно ли в Selenium IDE (версия 3.8.5) удалить coockie пользователей?

Целесообразность WebDriverWait

$
0
0
Недавно посмотрел видео Алексея "Заморочки в Selenium WebDriver". Я ждал более технических моментов, по типу staleness. Один из таких хотелось бы обсудить. А именно, есть ли реальная необходимость в классе WebDriverWait и его основном методе Until. 
 
Все последующие размышления основаны на исходном коде C#.
 
При создании экземпляра WebDriverWait в конструктор передается экземпляр драйвера, который сохранятеся во внутреннем поле input. Метод Until предполагает делегат, входным параметром которого должен быть IWebDriver, экземпляром которого и является input.
 
 
Я задаюсь вопросом зачем такие сложности, нужен ли вообще WebDriverWait и можно ли от него отказаться?
 
Давайте посмотрим на исходный код метода Until. Костяк его логики - это бесконечный цикл с двумя условиями выхода из него: наступление нужного события или timeout. Дополнительными "плюшками" являются игнорирование предопределенных exceptions и возврат объекта, если в качестве TResult выступает не bool (об этом чуть позже).
 
Первый ограничение, которое я вижу - нам всегда требуется именно экземпляр IWebDriver, хотя внутри метода Until (если быть точным, то в качестве входного параметра для condition) мы могли бы вполне обойтись ISearchContext. Ведь в большинстве случаев мы ожидаем какого-то элемента или изменения его свойства и используем FindElement(s) для его поиска.
 
Я рискну заявить, что использование ISearchContext было бы даже более логичным, ведь клиентский код (класс) - это не только page object, который в поиске дочерних элементов отталкивается от корня страницы. Иногда это класс, описывающий некий составной элемент, у которого корнем является другой элемент страницы, а не сама страница. В качестве такого примера можно привести SelectElement, который принимает в конструктор ссылку на родительский IWebElement.
 
Вернемся к вопросу инициализации WebDriverWait. Это действие требует экземпляр драйвера. Т.е. нам всегда, так или иначе, в клиентский код необходимо извне пробрасывать экземпляр IWebDriver, даже если это класс некоего составного элемента (пример про SelectElement), который уже принимает "родителя". С моей точки зрения, это излишне.
 
Конечно, мы можем создать класс по аналогии 
SearchContextWait : DefaultWait<ISearchContext>
Но не будем торопиться. Он нам не понадобится.
 
Давайте посмотрим, как используется передаваемый в condition экземпляр драйвера. Обычно это выглядит как-то так:
 
        var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
        wait.Until( d => d.FindElements(By.XPath("locator")).Count > 0 );
Возникает вопрос, зачем внутри condition необходима "локальная" версия драйвера, если он всегда доступен из клиентского кода? Более того, это тот же самый экземпляр, переданный ранее через конструктор. Т.е. код может выглядет как-то так:
 
        var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
        wait.Until( d => Driver.FindElements(By.XPath("locator")).Count > 0 );
Даже Simon Stewart в своем выступлении использует такой подход.
 
QhMNrkA.jpg
 
Он не пишет "d -> d.", а пишет "d -> driver.", т.е. переданный внутрь метода экземпляр драйвера попросту игнорируется. Но передавать его необходимо, ибо этого требует сигнатура метода!
 
Итак, зачем же передавать драйвер во внутрь condition метода? Возможно, чтобы изолировать поиск внутри этого метода, как это реализовано в ExpectedConditions? Посмотрите на реализацию метода TextToBePresentInElement. Или VisibilityOfAllElementsLocatedBy. Или TextToBePresentInElementValue. В них переданный драйвер даже не используется!
 
 
Итак, первая мысль - нам не нужен метод Until с параметром-делегатом, который принимает драйвер.
 
Давайте теперь разберемся, нужено ли методу Until возвращаемое значение? Если в качестве TResult выступает bool, то нет, не нужно. Ведь в случае успеха вы получите true, а в случае неудачи вы получите TimeoutException. В чем информативность такого поведения?
 
А если в качестве TResult выступает object? Предположим, такую конструкцию:
 
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
var element = wait.Until(d => d.FindElement(xpath));
Т.е. мы не только ждем появления элемента, а и используем его (если дождались), тем самым убирая одно лишнее обращение к DOM. OK.
 
Давайте посмотрим пристальнее на эти три строчки кода. Внутри реализации метода Until это сводиться к некоему подобию (условный код)
 
try { FindElement } catch (NoSuchElementException) {}
Поскольку генерация exception довольно дорогостоящее событие, то я бы предпочел его избегать, особоенно в тех местах, где это не представляет труда. Мы можем переписать код следующим образом:
 
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
var elements = wait.Until(d => d.FindElements(xpath));
Т.е. мы используем FindElements, который не генерирует исключение. Подождите, а будет ли эта конструкция ждать появления элементов? НЕТ! Потому что, если посмотреть в исходный код, выполнение бесконечного цикла завершает сразу, как только condition возвращает не null. А FindElements в случае неудачи возвращает пустую колекцию, но никак не null. Т.е. для списка элементов использование Until не имеет смысла.
 
Вторая мысль - возвращаемое значение метода Until не используется в большинстве случаев.
 
Передаваемое значение излишне, возвращаемое значение не используется. В чем же полезность Until? Только лишь в цикле и периодичности вызова condition метода? Этот подход уже реализован в C# в методе SpinWait.SpinUntil. Единственное его отличие, что он не генерирует исключение по timeout. Это можно исправить следующим образом:
 
        public void Wait(Func<bool> condition, TimeSpan timeout)
        {
            var waited = SpinWait.SpinUntil(condition, timeout);
            if (!waited)
            {
                throw new TimeoutException();
            }
        }
Т.е. эти несколько строк кода в большистве случаев заменяют логику работы WebDriverWait. Стоит ли усилия результата?
 
 

вопрос по 'visibilityOfElementLocated'

$
0
0

Всем привет!

Начинаю разбираться с автоматизацией, и появился вопрос касательно visibilityOfElementLocated, метод не определяется, что я делаю не так?он всегда подсвечивается красным цветом.
использовал изначально Threed.sleep(), но потом выяснил, что это не очень хорошо.
Может быть, еще будут другие советы....как лучше сделать в данном случае....

импорт сделал
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

 

 

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

  • 2019-03-14_1300.png

Как найти элемент, есть только value

$
0
0

Всем привет подскажите новичку, как достучаться до value!

<option value="EE830A6D-71DC-441E-99E5-E5FC9E0828D1">
АГЗ МЧС РФ (пос. Новогорск, МО). Кафедра иностранных языков</option>

Кастомизация параметризации в pytest

$
0
0

Доброго дня!

В одной из лекций Алексея Баранцева говорится о том, как можно организовать передачу тестовых данных из файла. Но у меня возник вопрос: если у меня есть большое количество наборов для одного и того же теста. Например, есть множество вкладок поиска, для каждой из которых свой набор данных, но тестируют они все 1 функциональность - поиск.

На текущий момент получается, что для каждого набора данных нужно создавать свой файл с данными. Я же хочу сделать следующее: поместить все наборы данных в 1 файл, а в тестовых функциях указывать, какой набор использовать. Отсюда вопрос: как это реализовать?

 

conftest:

def pytest_generate_tests(metafunc):
    for fixture in metafunc.fixturenames:
        if fixture.startswith("data_"):
            module = load_from_module(fixture[5:])
            metafunc.parametrize(fixture, module, ids=[repr(id) for id in module])


def load_from_module(module):
    return importlib.import_module("data.%s" % module).testdata # get the rest of data_ from test method param and look for in data dir

файл с данными:

from model.search_export import *

dn_dn = [
    SearchExportDB(id="0001", result_type="1", result_number=3, format_type="pdf", expected_result=True),
    SearchExportDB(id="0002", result_type="1", result_number=3, format_type="doc", expected_result=True),
    SearchExportDB(id="0003", result_type="1", result_number=3, format_type="csv", expected_result=True),
    SearchExportDB(id="0004", result_type="1", result_number=0, format_type="csv", expected_result=False),
    SearchExportDB(id="0005", result_type=None, result_number=3, format_type="csv", expected_result=False),
    SearchExportDB(id="0006", result_type="2", result_number=3, format_type=None, expected_result=False),
    SearchExportDB(id="0007", result_type="2", result_number=3, format_type="csv", expected_result=True),
    SearchExportDB(id="0008", result_type="2", result_number=3, format_type="pdf", expected_result=True),
    SearchExportDB(id="0009", result_type="2", result_number=3, format_type="doc", expected_result=True),
    SearchExportDB(id="0010", result_type="2", result_number=0, format_type=None, expected_result=False)
]

dn_rec = [
    SearchExportDB(id="0001", result_type="1", result_number=3, format_type="pdf", expected_result=True)
]

тесты:

def test_pro_search_export_data_dn_dn(app, data_search_export, data_search_export_donations):
    searchexport = data_search_export
    searchdata = data_search_export_donations
    app.reload_page()
    app.dbset.open_search_page_donations()
    app.dbset.open_tab_us()
    app.dbset.open_dn_tab_us_donor()
    app.donations.perform_search_tab_us_donor(searchdata)
    run_export_search_list = app.searchexport.run_export_search(searchexport)
    result = app.searchexport.check_saved_file(run_export_search_list, searchexport, removeall=True)
    assert result == True

def test_pro_search_export_data_dn_co(app, data_search_export, data_search_export_donations):
    searchexport = data_search_export
    searchdata = data_search_export_donations
    app.reload_page()
    app.dbset.open_search_page_donations()
    app.dbset.open_tab_us()
    app.dbset.open_dn_tab_us_recipient()
    app.donations.perform_search_tab_us_donor(searchdata)
    run_export_search_list = app.searchexport.run_export_search(searchexport)
    result = app.searchexport.check_saved_file(run_export_search_list, searchexport, removeall=True)
    assert result == True

Т.е., можно ли как-то, указывая, например, data_search_export__dn_dn, конкретизировать, из какого объекта брать данные для конкретного теста?

 

Заранее благодарен

Viewing all 702 articles
Browse latest View live