我已经加载了QWebView中的HTML表单。这个HTML有以下两个元素:
<button class="submit1" tabindex="1" type="submit" id="submit1">accept</button>
<button class="submit2" tabindex="2" type="submit" id="submit2">decline</button>
在代码中,我有以下内容:
QWebView webView;
...
QWebElement button = webView->page()->mainFrame()->documentElement().findFirst("button[id="submit1"]");
button.evaluateJavaScript("this.click();");
最后一行代码对我不起作用。此外,如果我有一个元素而不是按钮,JavaScript click()方法可以很好地工作。
我无法回答这个问题,因为从你给我们的信息中很难判断什么是EXACT问题,但我能做的是给你一些关于在QWebView中调试问题的指导。
1) 我要检查的第一件事是,你手中是否真的有按钮元素。尝试这样做:
QWebView webView;
...
QWebElement button = webView->page()....findFirst("button[id="submit1"]");
if button is not None:
button.evaluateJavaScript("this.click();");
else:
print "Oh dear!"
通过这个,我们想看看findFirst()是否真的得到了元素(我相信它确实得到了,语法似乎很好)。
2) 转到你正在处理的网页。那个按钮真的能用吗?某些脚本可能会为其注入"disabled"属性,从而使其无法单击。
3) 尝试以某种不同的方式锁定元素:
按类别获取:
QWebElement button = webView->page()->mainFrame()->documentElement().findFirst("button[class=submit1]");
尝试锁定家长,然后获得第一个孩子:
QWebElement parent = **get the parent element**
button = parent.findAll("button")[0]
通常我会尽量避免使用这样的方法,因为在某些情况下它很容易崩溃。如果这是唯一对你有效的方法,我强烈建议你尝试一下,以避免出现任何问题。
小提示:你说过如果你得到一个元素而不是一个按钮,click()可以很好地工作。原因是click()对无法单击或附加了某种行为的元素click()事件。所以它基本上什么都不做:)