0

このガイドhttps://developer.mozilla.org/en/Java_in_Firefox_Extensionsに従って、Firefox プラグインで Java クラスにアクセスできるようにしました (実際には、それらを Selenium ide のユーザー拡張機能に追加しています)。

私のJavaコードがインポートされたオブジェクトを初期化しようとするまで、すべてが上記のガイドでうまく機能します...

そのため、jtidy をインポートして html をクリーンアップしようとすると、初期化するとすぐに java.lang.reflect.InvocationTargetException 例外が発生します。興味深いことに、javascript で jtidy クラスを初期化してからこれを渡すことができ、dom を解析しようとするまで機能します。これはすべてアクセス許可に関係していると思いますが、ここからどこに行くべきかを知るには、Live Connect を十分に使用していません。

私のコードは次のとおりです。

Javascript

PageBot.prototype.locateElementByLabelText = function(labelText, inDocument) {
    //var pageTitle = inDocument.getElementsByTagName('title').item(0).nodeName;
    var pageTitle = inDocument.title;
    LOG.warn("Title = "+ pageTitle);
    var pageSource = inDocument.getElementsByTagName('html')[0].innerHTML;
    LOG.warn("I have the page source");
    var xpathValue = getXpathUsingJavaFnc(labelText, pageTitle, pageSource);
    LOG.warn("Xpath = "+xpathValue);
    return this.locateElementByXPath(xpathValue, inDocument);
};


Selenium.prototype.doLoadProject = function(locator, paramString) {
    LOG.warn("starting to load Load Project "+locator + " " + paramString);
    try{
    var result = inst.initialiseProject(locator, Components.classes["@mozilla.org/process/environment;1"].getService(Components.interfaces.nsIEnvironment).get('AUTOMATED_HOME')+"/");
    }catch(e){
    LOG.warn(e.message);
    }
    LOG.warn("finished Load Project");
    LOG.warn(result);
};




var basePath = Components.classes["@mozilla.org/process/environment;1"].getService(Components.interfaces.nsIEnvironment).get('AUTOMATED_HOME');
 var fullPath = 'file:///' + basePath + '/ScenarioFramework-jar-with-dependencies.jar';

LOG.warn("full path = "+fullPath);
var extensionUrl = "file:///" + basePath +'/javaFirefoxExtensionUtils.jar';  
var classLoaderJarpath = extensionUrl;  
var myJarpath = fullPath;   
//var testTidy = "file:///" + basePath +'/jtidy-r938.jar'; 

var urlArray = []; 
urlArray[0] = new java.net.URL(myJarpath);  
urlArray[1] = new java.net.URL(classLoaderJarpath);  
urlArray[2] = new java.net.URL(testTidy); 
var cl = java.net.URLClassLoader.newInstance(urlArray);  

policyAdd(cl, urlArray);  
var classToLoad = "scenario.framework.main.SeleniumRunner";
var aClass = cl.loadClass(classToLoad);
//var aClass = java.lang.Class.forName(classToLoad, true, cl);
var inst = aClass.newInstance();

LOG.warn("finished loading add Java");



function getXpathUsingJavaFnc(eleName, pageTitle, pageSource) {
LOG.warn("Testing getXpath");
    try{    
        var xpathValue = inst.findElementUsingName(eleName, pageTitle, pageSource);

    }catch(e){
        //var jvm = Components.classes["@mozilla.org/oji/jvm-mgr;1"].getService(Components.interfaces.nsIJVMManager);
        //jvm.showJavaConsole();
        logExc(e);
    }
return xpathValue;
};


function policyAdd (loader, urls) {  
    try {       
        var str = 'edu.mit.simile.javaFirefoxExtensionUtils.URLSetPolicy';  
        var policyClass = java.lang.Class.forName(  
           str,  
           true,  
           loader  
    );  
    var policy = policyClass.newInstance();  
    policy.setOuterPolicy(java.security.Policy.getPolicy());  
    java.security.Policy.setPolicy(policy);  
    policy.addPermission(new java.security.AllPermission());  
    for (var j=0; j < urls.length; j++) {  
        policy.addURL(urls[j]);  
    }  
    java.lang.System.setSecurityManager(null);

var t = java.lang.Thread.currentThread().setContextClassLoader(cl);

    }catch(e) {  
        logExc(e);
    }  
}  


function logExc(e) {
    try {
        while(e != null) {
            LOG.warn(e);
            e = e.getCause();
        }
        LOG.warn(netscape.javascript.JSUtil.getStackTrace(e));
    } catch(exp) {
         LOG.warn("exception while logging exception");
         LOG.warn(exp);
        LOG.warn("exception being logged");
        LOG.warn(e);
    }
}

ジャワ:

public static String findElementUsingName(String Name, String pageTitle, String html){
     org.w3c.tidy.Tidy tidy = new org.w3c.tidy.Tidy();
     return "//input[@id='password']";
}
4

1 に答える 1

0

コンパイルするたびにFirefoxを再起動します

于 2012-05-30T04:03:02.193 に答える