Selenuim против QT (+ веб-драйвер): как я могу прочитать данные из QStandardItemModel / QTableView - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь написать код автоматизации на python с Selenium и извлечь данные из QTableView в QT, который заполняется с помощью QStandardItemModel, и я не могу на протяжении всей жизни найти данные. Я даже не вижу саму модель. Я работаю через веб-драйвер QT (один из наших разработчиков обернул наш код им). Я некоторое время искал SO, но не смог найти ничего, что имеет отношение к этому вопросу.

Модель создана (в C ++) как таковая (некоторые элементы удалены в целях конфиденциальности):

std::vector<int> vec{1,2,3};
//model is member
model = new QStandardItemModel(vec.size(), 3, this);
model->setHorizontalHeaderLabels(
        {Qstring::fromStdString("header1"), Qstring::fromStdString("header2"), Qstring::fromStdString("header3")});

for (int row = 0; row < vec.size(); ++row) {
    for (int col = 0; col < 3; ++col) {
        QModelIndex index = m_model->index(row, col, QModelIndex());
        m_model->setData(index, vec[row]);
    }
}
ui->tableView->setModel(model);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView->resizeColumnsToContents();
ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->tableView->show();

Когда я копирую исходный_страничный ресурс из драйвера, я получаю (опять же, некоторые элементы удалены для конфиденциальности):

<MainWindow id="MainWindow" name="generic name" elementId="3aa46937bdbb3f42a0cd8d0187cb654c" className="MainWindow">
<QWidget id="centralWidget" elementId="65c5cd0d7e8d8bc35c67cb6c81936ca2" className="QWidget">
    <QStackedWidget id="stackedWidget" elementId="4a6ac7e7d7ca5de9b4aa3ca2a3db766e" className="QStackedWidget">
                <QWidget id="listUnspent" elementId="5ef05bc4889f20fce8b431de39ddf95a" className="QWidget">
                    <QTableView id="tableView" elementId="767406a3514ef2e9c627ab495a585365" className="QTableView">
                        <QWidget id="qt_scrollarea_viewport" elementId="5254d690f8bfd8fe4e7086ed8db6e8ef" className="QWidget"/>
                        <QWidget id="qt_scrollarea_hcontainer" elementId="4d8a1f4a1edbfb3ab497165454c78938" className="QWidget">
                            <QScrollBar elementId="c8b64d817fb67f90d389b99638548b74" className="QScrollBar"/>
                        </QWidget>
                        <QWidget id="qt_scrollarea_vcontainer" elementId="a98aabc93e535a20dc15d7b12fa9ac0e" className="QWidget">
                            <QScrollBar elementId="c371584b9cc4e290ae6cabc19055915e" className="QScrollBar"/>
                        </QWidget>
                        <QHeaderView elementId="44eb6bbf3fd64602bf372dd88d075a1b" className="QHeaderView">
                            <QWidget id="qt_scrollarea_viewport" elementId="ed762bb1497295b05d5c072ee8b5fd7d" className="QWidget"/>
                            <QWidget id="qt_scrollarea_hcontainer" elementId="b03b6edf0cb8ac33fb9818f721908e38" className="QWidget">
                                <QScrollBar elementId="217023db613ff7062ed6b0b657ac276f" className="QScrollBar"/>
                            </QWidget>
                            <QWidget id="qt_scrollarea_vcontainer" elementId="28bd1488db038f7a9538869d7c4f5f86" className="QWidget">
                                <QScrollBar elementId="c317ee4f4eb42471f37f7535e4336523" className="QScrollBar"/>
                            </QWidget>
                        </QHeaderView>
                        <QHeaderView elementId="d59b5ad281b15bb2e866eb63c6703ef1" className="QHeaderView">
                            <QWidget id="qt_scrollarea_viewport" elementId="ebedd059f090fbfada4e6530596df2a3" className="QWidget"/>
                            <QWidget id="qt_scrollarea_hcontainer" elementId="026fb1c1c160d8f0c7c5edb661c8cff9" className="QWidget">
                                <QScrollBar elementId="1814f022f612464453cf3f17f07dff57" className="QScrollBar"/>
                            </QWidget>
                            <QWidget id="qt_scrollarea_vcontainer" elementId="a28808530e7696fb0169b167a75cee54" className="QWidget">
                                <QScrollBar elementId="1eea61f6c330bc555e1307ecbe044413" className="QScrollBar"/>
                            </QWidget>
                        </QHeaderView>
                        <QTableCornerButton elementId="47baa81d6b2ca136ac12c4b00c1748f6" className="QTableCornerButton"/>
                    </QTableView>
                </QWidget>
    </QStackedWidget>
</QWidget>

Как можно легко заметить, нет никаких следовфактических данных, которые находятся внутри таблиц. При написании автоматизации я вижу QTableView, использующий (в python)

element = self.driver.find_elements_by_xpath(
            "//QTableView"))

, пробующий следующие вещи, также не сработавшие:

element.text
element.get_attribute("value")
element.get_attribute("title")
self.driver.execute_script("return jQuery(arguments[0]).val();", element)

Я не очень оптимистичен в отношении этого подхода, так какон пытается найти данные в источнике страницы, которого явно нет.

У меня такой вопрос: как мне получить данные, заполненные QStandardItemModel? Я имею в виду, это должно быть где-то, верно? Это представлено на экране. Есть ли способ прочитать?

Заранее большое спасибо!

...