2017-06-19 8 views
0

Mit JxBrowser ich einen Code wie einen Klick auf einem HTML-Elemente simulieren möchte, mitSimulieren einen Klick auf dom Elemente

final DOMDocument dom = browser.getDocument(); 
Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>() 
{ 
@Override 
public void invoke(Browser browser) { 
    DOMElement elementToClick = dom.findElement(By.xpath("some xPath expression")); 
    if (elementToClick != null) { 
     elementToClick.click(); 
    } 
} 
}); 

Dies funktioniert gut, wenn der Klick() -Aktion eine Seite führt zum Download, aber wenn der Klick läuft nur etwas Javascript (ohne Netzwerkaktionen), ich habe eine Timeout-Ausnahme. Also meine Frage ist, wie kann ich warten, dass ein Klick Aktion ausgeführt wird, wenn es entweder "reines" Javascript oder Web-Zugriff ausführt.

Vielen Dank für Ihre Hilfe.

Grüße, Christophe

Antwort

0

Der DOMElement Klick() -Methode ist asynchron und JxBrowser wartet nicht, bis eine Aktion auf die durch diese Methode verursacht die Homepage fertig ist.

Ich schlage vor, dass Sie eine JavaScript-Lösung verwenden können, um das DOM-Element programmgesteuert zu klicken. Die Methode executeJavaScriptAndReturnValue() der Browser-Instanz ist synchron und wartet, bis alle JavaScript-Ereignis-Listener ausgeführt wurden, die die Klickaktion für dieses DOM-Element verarbeiten. Trotzdem sollten Sie immer noch prüfen, ob der Browser geladen ist, wenn die Klick-Aktion zum Laden der Seite führt. Bitte sehen Sie sich das folgende Codebeispiel an:

browser.executeJavaScriptAndReturnValue("document.getElementById('converted some xPath expression').click();"); 
Verwandte Themen