Russian Qt Forum
Сентябрь 30, 2024, 18:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: keyClicks в QFileDialog'е  (Прочитано 10718 раз)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« : Ноябрь 09, 2012, 09:37 »

Добрый день. Проблема в следующем.
Есть некоторый тестовый сценарий, в один момент открывается диалог:

Код:
fileName = QFileDialog::getOpenFileName(this, tr("Открыть файл "),
                                                       QDir::currentPath(),
                                                       tr("TXT Files ( *.txt)"));
Ну т.е. стандартная ситация для рабоыт с файлами.
В диалоге в строке ввода имени файла нужно ввести некоторую строку (к примеру "1.txt"), но с помощью keyClicks сделать не получается, так как первый параметр - привязка к виджету.

Можно ли вообще как-нибудь симулировать клацанье по клавишам без привязки? Ибо фокус уже стоит в строке ввода имени файла в диалоге.
Записан
_OLEGator_
Гость
« Ответ #1 : Ноябрь 09, 2012, 09:45 »

Если проблема только в вводе имени файла, то
Код
C++ (Qt)
fileName = QFileDialog::getOpenFileName(this, tr("Открыть файл"), QDir::currentPath() + "/1.txt", tr("TXT Files ( *.txt)"));

А если надо что-то эмулировать нажатия клавиш, то не понятно зачем такой изврат.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #2 : Ноябрь 09, 2012, 10:05 »

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

Я именно про "изврат", хотя не понимаю почему так обозвали вы это =) Создаю, считайте, сценарий тестового случая используя средства QtTest.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #3 : Ноябрь 09, 2012, 10:32 »

И вот как быть не знаю
Записан
_OLEGator_
Гость
« Ответ #4 : Ноябрь 09, 2012, 10:44 »

Если пишешь тесты, то зачем эмулировать ввод в диалог выбора файла, ты же не диалог тестируешь а программу. Вообще должно имя файла сразу подаваться без всяких диалогов.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Ноябрь 09, 2012, 10:48 »

Цитата: assistant
On Windows, Mac OS X and Symbian^3, this static function will use the native file dialog and not a QFileDialog.
Т.е. для Qt появившийся диалог будет black-box и никакой речи о виджетах в данном случае быть не может.
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #6 : Ноябрь 09, 2012, 10:52 »

Тут ТС в принципе неправ.

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

PS хотя тестовые сценарии для меня глушь.

PPS оффтоп: Zerkin, на досуге не сделаете специально для меня маленький проектик - допустим тестирования нажатия пары кнопок и одной функции? А то документации по QtTest мне нехватает Улыбающийся Заодно если пойму, мб и вам помогу разобраться.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #7 : Ноябрь 09, 2012, 10:53 »

_OLEGator_, спасибо за ваши советы, можно конечно и так сделать, но у меня даже больше не тест программы как таковой, а  сценарий её выполнения  эммулируя действия пользователя =)

GreatSnake, т.е. я правильно понимаю, что с таким вариантом я ничего туда ввести не смогу через средства QtTest? Вариант только если изгаляться и определять файл-диалог внутри класса с гуи?
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #8 : Ноябрь 09, 2012, 10:57 »

Могу вот код предложить посмотреть =) Но опять же, это не тестирование как таковое, нужен именно сценарий выполнения, почему решил делать через C++/Qt, а не через какой-нибудь вижуал-тест - не знаю, наверно потому что в других технологиях разибиратсья лень, хотя выходить оно пока только боком =).

Код:
void	Test_MainWindow::test_mainWindow()
{
MainWindow w;
w.show();
QTest::qWaitForWindowShown(&w);
QTest::qWait(1000);

////Тест закрытия программы
//QTest::keyClick(w.ui.closePushButton, Qt::Key_Space);
//QTest::qWait(1000);

//Тест открытия файла
QTest::keyClick(&w, Qt::Key_Alt);
QTest::qWait(1000);
QTest::keyClick(w.ui.menuBar, Qt::Key_Enter);
QTest::qWait(1000);
QTest::keyClick(w.ui.menu, Qt::Key_Enter);
QTest::qWait(1000);
QTest::keyClick(&w, Qt::Key_Enter); //открылся диалог
QTest::qWait(1000);
       // здесь у меня и началиь проблемы
       //QTest::keyClicks(куда  не понятно)



////Тест добавления данных
//открытие файла добавить
//QTest::keyClicks(w.ui.nameLineEdit, "Walter");
//QTest::qWait(1000);
//QTest::keyClicks(w.ui.surnameLineEdit, "White");
//QTest::qWait(1000);
//QTest::keyClick(w.ui.addPushButton, Qt::Key_Space);
//QTest::qWait(3000);

////Тест вывода данных (Все поля)
////открытие файла добавить
//QTest::mouseClick(w.ui.allFieldsRadioButton, Qt::LeftButton);
//QTest::qWait(1000);
//QTest::mouseClick(w.ui.printPushButton, Qt::LeftButton);
//QTest::qWait(3000);

////Тест вывода данных (Список имен)
////открытие файла добавить
//QTest::mouseClick(w.ui.nameFieldsRadioButton, Qt::LeftButton);
//QTest::qWait(1000);
//QTest::mouseClick(w.ui.printPushButton, Qt::LeftButton);
//QTest::qWait(3000);

////Тест вывода данных (Список фамилий)
////открытие файла добавить
//QTest::mouseClick(w.ui.surnameFieldsRadioButton, Qt::LeftButton);
//QTest::qWait(1000);
//QTest::mouseClick(w.ui.printPushButton, Qt::LeftButton);
//QTest::qWait(3000);

//Тест ввода неполных данных
//открытие файла добавить
//QTest::keyClicks(w.ui.nameLineEdit, "Hank");
//QTest::qWait(1000);
//QTest::keyClick(w.ui.addPushButton, Qt::Key_Space);
//QTest::qWait(3000);
}


Как видите, там  несколько сценариев закомментированных.
« Последнее редактирование: Ноябрь 09, 2012, 11:11 от Zerkin » Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #9 : Ноябрь 09, 2012, 11:07 »

Bepec, у меня как раз и есть небольшое приложение, над которым и строю всю эту тестовую штуку, так что если интересно, то поделюсь.
Записан
Bepec
Гость
« Ответ #10 : Ноябрь 09, 2012, 12:18 »

Очень интересно. Необходимость в тестах имеется, а вот разобраться всё никак руки не доходили.
Записан
_OLEGator_
Гость
« Ответ #11 : Ноябрь 09, 2012, 12:27 »

Хм, ну теперь понятно - тестирование интерфейса. Я даже не знаю, есть ли те, кто этим действительно занимаются и это работает, потому что тогда не нанимались бы тестеры.
Имхо, вы страдаете ерундой, тестирование интерфейса программно - это затратная не нужная операция, которая тестером выполняется и быстрее и дешевле.
В конечном итоге вы задаете жесткую последовательность операций, которую можно переделать в прямые вызовы нужных функция с заданными аргументами.
Тестируйте свои функции и корректность их работы.
Записан
Bepec
Гость
« Ответ #12 : Ноябрь 09, 2012, 12:46 »

_OLEGator_ - не путайте:

тестирование интерфейса на баги
и
тестирование интерфейса на работоспособность.

В моём случае нужда возникла, когда имеется модульная система - при каждой правке модуля, имеется шанс испортить уже имеющийся/оттестированный функционал.

Потому система накопительных тестов нужна - никто же не будет тестировщику давать тыкать по 10 раз одну и ту же последовательность действий и сверять результат.

PS в таком случае мы уходим от функций. Получаем независимость от кода/функций. Важен только результат Веселый
Записан
_OLEGator_
Гость
« Ответ #13 : Ноябрь 09, 2012, 13:44 »

"тестирование интерфейса на баги" - гениальная фраза.
Я и не путаю. Зачем тестировать нажатие кнопки и проверять вызывается ли слот (в терминах Qt)?!
Я склонен полагать, что тестирование не должно быть привязано к интерфейсу, поэтому искренне не понимаю необходимость тестировать код через интерфейс.
Записан
Bepec
Гость
« Ответ #14 : Ноябрь 09, 2012, 13:50 »

Даша связала кнопку A с функцией B. Дима удалил функцию B и заменил её на функцию C с аналогичными параметрами. Что получит пользователь при нажатии на кнопку? 
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 22.