Exception in thread “main” org.openqa.selenium.WebDriverException: $ is not defined

久未见 提交于 2019-12-25 00:33:10

问题


I am getting CSS selector by ID. I get an error when I call the getCSS method as

UpdateActualPath actualPath= new UpdateActualPath();
    actualPath.getCSS("https://www.google.co.in/", "a");

Here is my code:

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class UpdateActualPath {
    static UpdateActualPath updateObject = new UpdateActualPath();
    static WebDriver driver = new FirefoxDriver();

    public void getCSS(String url, String tagname) throws IOException {
        // driver.get("http://scripting.jdpoweronline.com/mrIWeb/mrIWeb.dll?I.Project=T1_QTYPE&i.test=1");
        driver.get("file:///home/himansu/Desktop/Static.html#4"); // url
        String jQuerySelector = "'body'";
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        String strJavaScript = (String) executor.executeScript("return $(" + jQuerySelector + ").html()");
        Document docparse = Jsoup.parse(strJavaScript);
        Elements inputTags = docparse.select("a"); // tagname
        if (!inputTags.isEmpty()) {
            Element tempTag = null;
            for (Element inputTag : inputTags) {
                String tempString = "";
                tempTag = inputTag;

                while (tempTag.tagName() != "html") {
                    String tagId = "";
                    String tagClass = "";
                    String tagType = "";
                    String tagLink = "";
                    if (tempTag.id() != "") {
                        tagId = "#" + tempTag.id() + " ";
                        tempString = tempTag.tagName() + tagId + tempString;
                        break;
                    }

                    else {
                        System.out.println("This Type Tag is Not Present in Current Web Page.....!!!!");
                    }
                }
            }
        }
    }

    private String findHrefAtttribute(Element tempTag, Elements tags) {
        String tlink = tempTag.attr("href");
        String css = "[href='" + tlink + "']";
        if (updateObject.checkType(tlink, tags) == 1)
            return css;
        else
            return "";

    }

    public String findChekboxAtttribute(Element tag, Elements tags) {
        String tagname = tag.attr("name");
        String css = "[name='" + tagname + "']";
        if (updateObject.checkType(tagname, tags) == 1)
            return css;
        else
            return "";
    }

    public String findImageAtttribute(Element tag, Elements tags) {
        String tagalt = tag.attr("alt");
        String tagname = tag.attr("name");
        if (updateObject.checkType(tagname, tags) == 1) {
            String css = "[alt='" + tagalt + "']" + "[name='" + tagname + "']";
            return css;
        } else {
            String css = "[alt='" + tagalt + "']";
            return css;
        }
    }

    public int checkType(String tagname, Elements chektags) {
        int count = 0;
        for (Element matchInputTag : chektags) {
            String matchtaghreftype = matchInputTag.attr("href");
            String matchtagtype = matchInputTag.attr("name");
            if (matchtagtype.compareTo(tagname) == 0)
                count++;
            if (matchtaghreftype.compareTo(tagname) == 0) {
                count++;
            }
        }
        return count;
    }

}

The full error is:

 Exception in thread "main" org.openqa.selenium.WebDriverException: $ is not defined
    Command duration or timeout: 513 milliseconds
    Build info: version: '2.41.0', revision: '3192d8a', time: '2014-03-27 17:17:32'
    System info: host: 'ATMECSINDT-068', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.8.0-37-generic', java.version: '1.7.0_55'
    Session ID: f706c2df-360d-4970-9ea7-9aa856ab32de
    Driver info: org.openqa.selenium.firefox.FirefoxDriver
    Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=30.0}]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
        at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595)
        at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:504)
        at publicc.UpdateActualPath.getCSS(UpdateActualPath.java:25)
        at publicc.Test.main(Test.java:29)
    Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: $ is not defined
    Build info: version: '2.41.0', revision: '3192d8a', time: '2014-03-27 17:17:32'
    System info: host: 'ATMECSINDT-068', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.8.0-37-generic', java.version: '1.7.0_55'
    Driver info: driver.version: unknown
        at <anonymous class>.anonymous(https://www.google.co.in/ line 68 > Function:1:1)
        at <anonymous class>.handleEvaluateEvent(https://www.google.co.in/:68:1)

When I change the URL to http://stackoverflow.com it works fine.


回答1:


The problem you describe is consistent with jQuery not being present on the page you are loading. You can avoid jQuery altogether by changing your first executeScript call in getCSS to:

String strJavaScript = 
    (String) executor.executeScript("return document.body.innerHTML");

It works on Stack Overflow because Stack Overflow loads jQuery.



来源:https://stackoverflow.com/questions/25608227/exception-in-thread-main-org-openqa-selenium-webdriverexception-is-not-defi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!