QFileDialogの自動化について



  • はじめまして。Takeshiです。
    QTestを用いた自動化を実施することを検討しています。

    あらかじめ用意してあるフォームやオブジェクトについてはテストが可能なのですが、
    ローカルで定義したオブジェクトを使った自動化作業で行き詰っています。
    対象となるObjectはQFileDialogです。

    ひとまずネットから引用してTopWigetを取得する関数を用いて、
    以下のところまで作成することができました。

    QFileDialog* QTest_forTESTGUITest::waitForFileDialog(int timeout)
    {
      int waitMSec = 0;
      while (waitMSec <= timeout) {
        QWidgetList allToplevelWidgets = QApplication::topLevelWidgets();
        foreach (QWidget w, allToplevelWidgets) {
          if (w->inherits("QFileDialog")) {
            QFileDialog
    fileDialog = qobject_cast<QFileDialog*>(w);
            QTest::qWaitForWindowActive(fileDialog);
            return fileDialog;
          }
        }
        QTest::qWait(10);
        waitMSec += 10;
      }
      return 0;
    }

    悩みはこの後です。
    以下のように、testCase1_FileDialogの中でFileDialogを取得した後、
      ・ファイルを指定
      ・開くボタンを押下
    の2操作が実現できません。
     (フラグのON、OFF設定やsingleShotについてはModalであるが故の処置です。)

    //ここでフラグ立てる
      this->isTestCase = true;

    //ファイルダイアログの表示
      QTimer::singleShot(0, this, SLOT(testCase1_FileDialog()));
      QTest::mouseClick(foepn_button, Qt::LeftButton);

    //フラグ戻す
      this->isTestCase = false;
    }

    void QTest_forTESTGUITest::testCase1_FileDialog()
    {
      if (this->isTestCase) {
        // FileDialogを取得
        QFileDialog* fileDialog = this->waitForFileDialog();
        //file選択
        fileDialog->hide();
        fileDialog->selectFile(exepath);
        fileDialog->show();
      }
    }
    今のところ、selectFileで指定する文字列にも「\」が「/」になってしまうし、
    開くボタンをfindすることもできていません。

    勉強不足で申し訳ありませんが、何かアドバイスをいただきたいです。

    環境は以下のとおりです。
    ・Qt5.2.0 LGPL
    ・OS:Windows 7

    よろしくお願いします。



Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.