Итак, скажем, я пытаюсь щелкнуть ссылку в QWebView, вот что у меня есть:
// extending QWebView
void MyWebView::click(const QString &selectorQuery)
{
QWebElement el = this->page()->mainFrame()->findFirstElement(selectorQuery);
if (!el)
return;
el.setFocus();
QMouseEvent pressEvent(QMouseEvent::MouseButtonPress, el.geometry().center(),
Qt::MouseButton::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(this, &pressEvent);
QMouseEvent releaseEvent(QMouseEvent::MouseButtonRelease,
el.geometry().center(), Qt::MouseButton::LeftButton,
Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(this, &releaseEvent);
}
И вы называете это так:
myWebView->click("a[href]"); // will click first link on page
myWebView->click("input[type=submit]"); // submits a form
ЕДИНСТВЕННАЯ ПРОБЛЕМА: если элемент не виден в окне, по нему невозможно щелкнуть. Я имею в виду, что если вам нужно прокрутить вниз, чтобы увидеть его, вы не сможете щелкнуть по нему. Я предполагаю, что это связано с геометрией, поскольку элемент не отображается на экране, он не может посчитать, чтобы щелкнуть его правильно.
Любые идеи, чтобы обойти это? Может быть, какой-то способ заставить окно вести себя как миллиард х миллиардов пикселей, но при этом выглядеть 200x200?