Так скажем, я пытаюсь нажать на ссылку в 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
ЕДИНСТВЕННАЯ ПРОБЛЕМА: если элемент не видим в окне, невозможно нажать. То, что я имею в виду, - то, если необходимо прокрутить вниз для наблюдения его, Вы не можете нажать его. Я предполагаю, что это имеет отношение к геометрии, так как элемент не обнаруживается на экране, это не может сделать математики для нажатия на него право.
Какие-либо идеи обойти это? Возможно, некоторый способ заставить окно вести себя как миллиард x миллиардов пикселей, но все еще смотрит 200x200?
Думаю, вызов el.evaluateJavaScript ("click ()");
должен работать. Я говорю, что должен работать, потому что в прошлом я успешно использовал QWebElement :: function ()
с аргументом «щелчок». Однако этот метод не стал частью QWebElement API. Думаю, авторы пришли к выводу, что наличие QWebElement :: AssessmentJavaScript ()
было лишним.
Мой аналогичный вопрос - Как перейти по ссылке в QWebKit? - все еще без ответа: (
Я придумал такой же обходной путь, как и вы здесь - Проблема с помощью AssessmentJavaScript ()