Получение значения QLabel с доступным именем с помощью UI Automation - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь написать тест пользовательского интерфейса (с использованием Windows UI Automation) для приложения, которое использует QLabel, чтобы показать вывод пользователю.

Я создаю ярлык так:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow w;
    w.setWindowTitle("MyWindowTitle");
    auto centralWidget = new QWidget(&w);
    centralWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    QVBoxLayout layout(centralWidget);

    auto interrestingLabel = new QLabel(centralWidget);
    QString valueCalculatedByApp = "1337";
    interrestingLabel->setText(valueCalculatedByApp);
    //interrestingLabel->setAccessibleName("MyAccessibleName");
    layout.addWidget(interrestingLabel);

    auto uninterrestingLabel = new QLabel(centralWidget);
    uninterrestingLabel->setText("uninterrestingText");
    layout.addWidget(uninterrestingLabel);

    w.setCentralWidget(centralWidget);
    w.show();

    return a.exec();
}

Inspect.exe теперь отображает значение «1337» в качестве имени виджета:

Без доступного имени

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

Если я раскомментирую строку setAccessibleName, виджет теперь будет идентифицируемым, но текст больше не будет виден в свойствах.

с доступным именем

Есть ли способ прочитать текст QLabel с доступным именем, или есть ли другой способ сделать QLabel идентифицируемым, в то же время читая текст?

1 Ответ

0 голосов
/ 12 января 2019

Я нашел обходной путь:

Вместо QLabel я использую QLineEdit. Я установил для параметра false значение false, чтобы его нельзя было выбрать или изменить (например, QLabel), и использую QSS, чтобы он выглядел как QLabel:

#include <QApplication>
#include <QLabel>
#include <QLineEdit>
#include <QMainWindow>
#include <QSizePolicy>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setAttribute(Qt::AA_NativeWindows);
    QMainWindow w;
    w.setWindowTitle("MyWindowTitle");
    auto centralWidget = new QWidget(&w);
    centralWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    QVBoxLayout layout(centralWidget);

    auto interrestingLabel = new QLineEdit(centralWidget);
    QString valueCalculatedByApp = "1337";
    interrestingLabel->setText(valueCalculatedByApp);
    interrestingLabel->setAccessibleName("MyAccessibleName");
    interrestingLabel->setEnabled(false);
    interrestingLabel->setStyleSheet(
        "border-style: none;"
        "color: black;"
        "background:transparent"
    );
    layout.addWidget(interrestingLabel);

    auto uninterrestingLabel = new QLabel(centralWidget);
    uninterrestingLabel->setText("uninterrestingText");
    layout.addWidget(uninterrestingLabel);

    w.setCentralWidget(centralWidget);
    w.show();

    return a.exec();
}
...