Не удается запустить веб-драйвер Selenium на сервере Tomcat? - PullRequest
0 голосов
/ 02 ноября 2018

У меня сервер Tomcat работает в Eclipse IDE. Вся настройка на Windows Server 2012. Когда я запускаю Selenium Webdriver с локального компьютера без сервера Tomcat, он работает нормально. Но он не работает на сервере Tomcat. Запуск кода селена на сервере Tomcat, потому что я пытаюсь создать API проверки URL с кодом ответа, который я получаю из приведенного ниже кода:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

    public static int DownloadPage(String url)
        {
            int status1=0;
            System.setProperty("webdriver.chrome.driver", "C:\\Jar\\chromedriver.exe");
            WebDriver driver = null;

            try
            {
                ChromeOptions options = new ChromeOptions();


                DesiredCapabilities cap = DesiredCapabilities.chrome();
                cap.setCapability(ChromeOptions.CAPABILITY, options);


                LoggingPreferences logPrefs = new LoggingPreferences();
                logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
                cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

                driver = new ChromeDriver(cap);

                // navigate to the page
                System.out.println("Navigate to " + url);
                driver.navigate().to(url);

                // and capture the last recorded url (it may be a redirect, or the
                // original url)
                String currentURL = driver.getCurrentUrl();

                // then ask for all the performance logs from this request
                // one of them will contain the Network.responseReceived method
                // and we shall find the "last recorded url" response
                LogEntries logs = driver.manage().logs().get("performance");

                int status = -1;

                System.out.println("\nList of log entries:\n");

                for (Iterator<LogEntry> it = logs.iterator(); it.hasNext();)
                {
                    LogEntry entry = it.next();

                    try
                    {
                        JSONObject json = new JSONObject(entry.getMessage());

                        System.out.println(json.toString());

                        JSONObject message = json.getJSONObject("message");
                        String method = message.getString("method");

                        if (method != null
                                && "Network.responseReceived".equals(method))
                        {
                            JSONObject params = message.getJSONObject("params");

                            JSONObject response = params.getJSONObject("response");
                            String messageUrl = response.getString("url");

                            if (currentURL.equals(messageUrl))
                            {
                                status = response.getInt("status");

                                System.out.println(
                                        "---------- bingo !!!!!!!!!!!!!! returned response for "
                                                + messageUrl + ": " + status);

                                System.out.println(
                                        "---------- bingo !!!!!!!!!!!!!! headers: "
                                                + response.get("headers"));
                            }
                        }
                    } catch (JSONException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                System.out.println("\nstatus code: " + status);
                status1=status;
            } finally
            {
                if (driver != null)
                {
                    driver.quit();
                }
            }
            return status1;
        }

Использованные файлы Jar:

selenium-server-standalone-3.4.0
java-json

Исключение:

java.lang.NoClassDefFoundError: org/openqa/selenium/Capabilities
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructors(Unknown Source)
    at com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller.createResource(IntrospectionModeller.java:111)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.getAbstractResource(WebApplicationImpl.java:744)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.createAbstractResourceModelStructures(WebApplicationImpl.java:1564)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1328)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:168)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:774)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:770)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)
    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319)
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1282)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1195)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5349)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5641)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.Capabilities
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1891)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
    ... 32 more

Я пытался связать все внутри WEB-INF, но все равно получилось исключение. Пожалуйста, найдите ниже банку в проекте Tomcat

enter image description here

Конечно, здесь чего-то не хватает. Любой совет, как это исправить, был бы действительно полезен. Заранее спасибо.

...