Exception in thread “main” org.openqa.selenium.Web

2019-09-06 01:34发布

问题:

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.