我正在尝试使用Selenium用python编写自动化代码,并从QT中的QTableView中提取数据,该视图使用QStandarItemModel填充,我一生都找不到数据。我甚至看不到模型本身。我正在使用QtWeb驱动程序(我们的一位开发人员用它包装了我们的代码)。我已经搜索了一段时间,但找不到任何与此问题相关的内容
模型是这样创建的(在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填充数据?我是说,它一定在某个地方,对吧?它出现在屏幕上。有没有办法读懂它
提前非常感谢
目前没有回答
相关问题 更多 >
编程相关推荐