Привет, я знаю, что этот вопрос довольно старый, но я хотел предложить другой ответ.
Вы сказали: «... так как элемент не отображается на экране, он не может выполнить математические операции, чтобы щелкнуть по нему ...». Ну, " it " не может сделать математику, но " You " может. ;)
Вы можете получить позицию элемента, по которому вы хотите щелкнуть, и рассчитать, сколько пикселей ( X ) вам нужно прокрутить вниз / вверх, чтобы сделать его видимым. Затем вы можете автоматически прокрутить страницу на X пикселей и использовать значение X , чтобы вычислить текущую позицию элемента и щелкнуть там. Та же логика используется, если вам нужно прокрутить влево или вправо тоже. Просто используйте Y пикселей в качестве значения горизонтальной коррекции.
Я сделал это на другом языке, и я знаю, что это выполнимо и отлично работает. :)
РЕДАКТИРОВАТЬ: (21 февраля 2013 г.)
ОК, я должен был сделать это и для одного из моих проектов. Чтобы проиллюстрировать, что я имел в виду выше, ниже приведен код Qt. Я понимаю, что у него есть некоторые недостатки, особенно если вы имеете дело с небольшими элементами по краям страницы, но в большинстве случаев это работает просто отлично.
(в приведенном ниже коде * elemt - элемент, на который вы хотите щелкнуть, а * web - виджет QWebView)
QRect elGeom=element->geometry();
QPoint elPoint=elGeom.center();
int elX=elPoint.x();
int elY=elPoint.y();
int webWidth=web->width();
int webHeight=web->height();
int pixelsToScrolRight=0;
int pixelsToScrolDown=0;
if (elX>webWidth) pixelsToScrolRight=elX-webWidth+elGeom.width()/2+10; //the +10 part if for the page to scroll a bit further
if (elY>webHeight) pixelsToScrolDown=elY-webHeight+elGeom.height()/2+10; //the +10 part if for the page to scroll a bit further
web->page()->mainFrame()->setScrollBarValue(Qt::Horizontal,pixelsToScrolRight);
web->page()->mainFrame()->setScrollBarValue(Qt::Vertical,pixelsToScrolDown);
QPoint pointToClick(elX-pixelsToScrolRight,elY-pixelsToScrolDown);
QMouseEvent pressEvent(QMouseEvent::MouseButtonPress,pointToClick,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QCoreApplication::sendEvent(web, &pressEvent);
QMouseEvent releaseEvent(QMouseEvent::MouseButtonRelease,pointToClick,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QCoreApplication::sendEvent(web, &releaseEvent);
Это то, что у меня работает, когда щелчок Java не срабатывает. Надеюсь, это будет полезно и кому-то еще.