Webelement click does not work
-
Hello,
I have a HTML page (HTML/CSS/Javascript) with :
[ HTML ]
<li id="tool_open" >Open</li>[ Javascript ]
document.getElementById('tool_open').click();It works !
I try to do the same in Qt (WebEngine) :
[ Qt ]
QWebEngineView * view = new QWebEngineView;
QWebPage * page;
QWebView *view2;
QWebFrame * frame;
QWebElement document;
QWebElementCollection elements;
[ ... ]
document = frame->documentElement();
elements = document.findAll("li");foreach (QWebElement element, elements){ if (element.attribute("id") == "tool_open") { // test 1 : KO element.evaluateJavaScript("this.click()"); // test 2 : KO document.findFirst("li[id='tool_open']").evaluateJavaScript("document.getElementById('tool_open').click()"); } }I can have all Webelements I want (have their name, attributes, etc.) but I can not interact with them, for example the click() function for my Webelement ("<li id="tool_open" >Open</li>") does not work whereas in Javascript it works...
Any idea ?
-
Hello,
I have a HTML page (HTML/CSS/Javascript) with :
[ HTML ]
<li id="tool_open" >Open</li>[ Javascript ]
document.getElementById('tool_open').click();It works !
I try to do the same in Qt (WebEngine) :
[ Qt ]
QWebEngineView * view = new QWebEngineView;
QWebPage * page;
QWebView *view2;
QWebFrame * frame;
QWebElement document;
QWebElementCollection elements;
[ ... ]
document = frame->documentElement();
elements = document.findAll("li");foreach (QWebElement element, elements){ if (element.attribute("id") == "tool_open") { // test 1 : KO element.evaluateJavaScript("this.click()"); // test 2 : KO document.findFirst("li[id='tool_open']").evaluateJavaScript("document.getElementById('tool_open').click()"); } }I can have all Webelements I want (have their name, attributes, etc.) but I can not interact with them, for example the click() function for my Webelement ("<li id="tool_open" >Open</li>") does not work whereas in Javascript it works...
Any idea ?
Hi @fgdevel,
Some confusion here. Why are you usingQWebEngineViewandQWebView? They both are different. The former usesQt WebEnginewhile latter usesQt Webkit. AndQt WebEnginelacks some API's.QWebElementis one of them.
Can you reframe your example considering onlyQWebViewas it only providesQWebElement? -
Yes, but it does not work too.
[ Qt ]
webView = new QWebView;
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(webView);
[ ... ]
QWebElement el = webView->page()->mainFrame()->findFirstElement("#tool_open");
el.evaluateJavaScript("this.click()");the click() action doesn't work
With an another Qt code, I can call a Javascript function, but all actions (click, mouse events...) don't work :
[ Javascript ]
function test()
{
alert('clic');
document.getElementById('tool_open').click();
}I have Js pop-up "clic" but the click() action on the webelement 'tool_source' doesn't work...
-
Yes, but it does not work too.
[ Qt ]
webView = new QWebView;
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(webView);
[ ... ]
QWebElement el = webView->page()->mainFrame()->findFirstElement("#tool_open");
el.evaluateJavaScript("this.click()");the click() action doesn't work
With an another Qt code, I can call a Javascript function, but all actions (click, mouse events...) don't work :
[ Javascript ]
function test()
{
alert('clic');
document.getElementById('tool_open').click();
}I have Js pop-up "clic" but the click() action on the webelement 'tool_source' doesn't work...
@fgdevel
QWebElement el = webView->page()->mainFrame()->findFirstElement("#tool_open");Does this return the exact element that you wanted ?
You can just doqDebug() << el.toPlainText(); //prints the button textIf this works then
evaluateJavaScriptshould work too. -
[ Qt ]
QWebElement el = webView->page()->mainFrame()->findFirstElement("#tool_open");
qDebug() << "WebElement : " + el.attribute("type");it works, el.plainText does not work for this kind of webelement
el.evaluateJavaScript("this.click()");
it does not work
-
[ Qt ]
QWebElement el = webView->page()->mainFrame()->findFirstElement("#tool_open");
qDebug() << "WebElement : " + el.attribute("type");it works, el.plainText does not work for this kind of webelement
el.evaluateJavaScript("this.click()");
it does not work
-
I try to simulate a webelement click thanks Qt.
In a web navigator the 'tool_open' click() opens an another web page (with javascript code...). I would like to do the same (simulate mouse clic) with Qt.
[ HTML ]
[ ... ]
<ul>
<li id="tool_clear">
<div></div>
Nouvelle Configuration
</li>
<li id="tool_open" >
<div id="fileinputs">
<div></div>
</div>
Open Image
</li>
</ul>
[ ... ] -
I try to simulate a webelement click thanks Qt.
In a web navigator the 'tool_open' click() opens an another web page (with javascript code...). I would like to do the same (simulate mouse clic) with Qt.
[ HTML ]
[ ... ]
<ul>
<li id="tool_clear">
<div></div>
Nouvelle Configuration
</li>
<li id="tool_open" >
<div id="fileinputs">
<div></div>
</div>
Open Image
</li>
</ul>
[ ... ]@fgdevel I dont see any code which gets invoked on click of
tool_open. For eg . the following works i.ealertis called<script> function click(){ alert("Clicked"); } </script> <li id="list" onclick="click()">Clickable list</li>and from Qt
QWebElement b = ui->webView->page()->mainFrame()->findFirstElement("#list"); b.evaluateJavaScript("this.click()"); -
-
the action is realized by this function :
[ JS ]
var clickOpen = function() { [ ... ] }but I don't know how to call this function in HTML, just clickOpen() doesn't work, even if I include the JS file in the HTML (<script src="myfile.js"></script>)
-
evaluateJavaScript is your friend
Exemple of code working with Jquery, replace with javascript code
QString jsToExecute += "$('#login-btn').click(); "; ui->webView_login->page()->mainFrame()->documentElement().evaluateJavaScript(jsToExecute + "; null" );