2017-01-13 11 views
0

Javaプロジェクトでは、Browserを使用してページを表示します。私は、JavaScriptとマッピングされたJavaメソッドを使用して、ドキュメントから要素を取得しました。HTMLDivElementをJavaコードに戻す方法

私はJavaScript:

var button = document.getElementById(`actionButton`); 

if(element != null) 
    buttonFound(element); 

buttonDivHtmlElementです。 BrowserFunctionとオーバーライドメソッド

@Override 
public Object function(Object[] arguments) { 
    browser.execute(arguments[0] + ".click()"); 
} 

を拡張しかし、この方法functionが呼び出されていない(?)

マップされたJavaメソッドbuttonFound

ButtonFoundFunction(this, browser, "buttonFound"); 

...。

私が示しJavaScriptが以下のようではないDivHtmlElementなく、簡単なボタンのidを返す試してみました:

@Override 
public Object function(Object[] arguments) { 
    browser.execute("document.getElementById('" + arguments[0] + "').click();"); 
} 

をクリックし

buttonFound(`actionButton`); 

、その後オーバーライドfunctionコールに...そして、それは動作しますが、それはボタンを検索idで2回、JavaScriptで最初に、functionで2回目です。

返信方法DivHtmlElementfunctionに戻しますか?

EDIT

ボタン検索最初のJavaScript:

var buttons = []; 

var buttons[0] = document.getElementById(`actionButton`); 

第二のJavaScriptのみインデックスをクリックして実行します。@I wrestled a bear onceは、私は「できることを言うように

function doClick(index){ 
    buttons[index].click();  
} 
+1

「DivHtmlElement」とは何ですか? ['JavascriptのHTMLElement'](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement)を意味しますか?ネイティブJSオブジェクトを別の言語に渡すことはできません。 –

+0

このSWTの 'Browser'クラスですか?その場合、executeメソッドはブラウザのコンテキストでのみJavaScriptを評価でき、DOM要素に直接アクセスすることはできません。 –

+0

'DivHtmlElement'は' DOM'の一部です。 'browser'はSWTの' Browser'クラスです。 DOM要素をクリックする他のオプションがありますか?おそらく、この 'Browser'オブジェクトで2番目のJavaScriptを実行し、' DivHtmlElement'がキャッシュに保持されていますか?そして、2番目のJS(クリックだけを呼び出す)は、キャッシュされた配列から値を取得してクリックしますか? – ACz

答えて

0

をネイティブのJSオブジェクトをJavaに渡すので、同じことを別の方法で行いました。

JavaScriptがそのように見える時:buttons配列はSWT Browserキャッシュにあるので

browser.execute("buttons[0].click()"); 

:Javaでクリックを実行するために

var buttons = []; 

var buttons[0] = document.getElementById(`actionButton`); 

それがコードで十分です。

関連する問題