2016-12-02 4 views
3

主な目的は、javacript要素authKeyをJavaコードにすることです。Firefox上でJava WebDriverからjs変数を使用する方法

のindex.html:

... 
     <script type="text/javascript"> 

     var params = { 
      authKey: "abc" 
     }; 

     Main.init("#content", params); 
    </script> 
... 

がmain.java:私が試した

Exception in thread "main" org.openqa.selenium.JavascriptException: ReferenceError: **params is not defined** 
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700' 
System info: host: 'Mikhails-MacBook-Pro.local', ip: '10.10.20.139', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11.6', java.version: '1.8.0_111' 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 

public static void main(String[] args) throws InterruptedException { 

     WebDriver d = new FirefoxDriver(); 
     d.get("***/index.html"); 
    //  System.out.println(" var " + d.findElement(By.xpath("/html/body/script[3]"))); 
     Thread.sleep(3000); 
     JavascriptExecutor jse = (JavascriptExecutor) d; 
//  System.out.println(jse.executeAsyncScript("document.URL")); 
     Object val = jse.executeScript("return params.authKey;"); 
     d.quit(); 
    } 

私はいつものようなものを取得しています。ここ コードですこのauthKeyパラメータを返すことなく、関数として取得するにはさまざまな方法がありますが、まだ何もありません。 それ?

ありがとうございます。

UPD: 解決策https://stackoverflow.com/a/40936063/6809155解決策はまだありますが、将来params.authKeyパラメータを取得するためにネイティブjsソリューションを探しています。

+1

可能な重複[セレンwebdriverを使用してJavaとJavaScriptを使用方法】(http://stackoverflow.com/questions/11430773/how-to-use-javascript-with- selenium-webdriver-using-java) – AxelH

+0

ランダムな推測では、JSのスコープが異なり、paramsは "window"オブジェクトにアタッチされていません。 – dav1d

+0

@AxelHありがとう、しかし、私はすでにそこからすべての亜種を試しました。そして、http://stackoverflow.com/questions/13994393/reading-javascript-variables-using-selenium-webdriver –

答えて

0

スクリプトタグが1つしかないと仮定すると、これは最初のものです。

WebElement scr = driver.findElement(By.tagName("script")); 
    System.out.println(scr.getAttribute("innerHTML")); 
    System.out.println(scr.getAttribute("innerText")); 

上記の2つの属性のいずれかを使用して、次の出力が得られます。

var params = { 
    authKey: "abc" 
}; 

Main.init("#content", params); 

てAuthKeyを取得するために、出力を解析...

+0

ああ、はい、それは解決策です:)ありがとう! **私はFirebugコンソールからこれを行うことができますが、ps:**でもまだ完璧ですが、正確にparams.authKeyの値を得ることができます。 –

2

のFirefoxのバージョンに応じて、スコープの問題があります。あなたの変数はwindow.wrappedJSObjectにサンドボックスされている可能性があります。

これを試してみてください:

Object val = jse.executeScript(
    "return (window.params || window.wrappedJSObject.params).authKey;"); 
+0

はい!それでおしまい! :) ありがとう! –

関連する問題