2012-04-05 2 views
3

В настоящее время я пытаюсь использовать HtmlUnit. Я хочу заполнить форму, а затем отправить ее. Но это приводит к ошибке, которая, по-видимому, вызвана тем, что файл недоступен, что приводит к сбросу соединения. Как я могу подавить это, поскольку это не имеет решающего значения, учитывая процесс загрузки всего веб-сайта? Это, похоже, не влияет на программу, но я просто хочу, чтобы она была отключена.Как сообщить htmlunit игнорировать определенные ошибки

Apr 05, 2012 12:25:13 PM com.gargoylesoftware.htmlunit.html.HtmlPage loadExternalJavaScriptFile 
Schwerwiegend(severe): Error loading JavaScript from [*link*]. 
java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149) 
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110) 
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264) 
    at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98) 
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252) 
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281) 
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247) 
    at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219) 
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298) 
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776) 
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1008) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:950) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:230) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:642) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$400(JavaScriptEngine.java:79) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:590) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:474) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptIfPossible(HtmlPage.java:870) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeInlineScriptIfNeeded(HtmlScript.java:302) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:368) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:230) 
    at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:240) 
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:598) 
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) 
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:556) 
    at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1142) 
    at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1044) 
    at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206) 
    at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329) 
    at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3018) 
    at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2005) 
    at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:908) 
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499) 
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452) 
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:789) 
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:225) 
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:179) 
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:221) 
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:106) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:433) 
    at com.gargoylesoftware.htmlunit.WebClient.loadDownloadedResponses(WebClient.java:2187) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:625) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.processPostponedActions(JavaScriptEngine.java:707) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1246) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1195) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1158) 
    at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:138) 
    at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:99) 
    at com.tronicguard.discovery.WebsiteManipulatorImplementation.<init>(WebsiteManipulatorImplementation.java:71) 
    at Main.main(Main.java:10) 
+0

HtmlUnit нашли ошибку в приложении: файл JavaScript не доступен. Если этот файл должен быть доступен, сделайте его доступным. Если этот файл не служит никакой цели, удалите ссылку на него. Цель тестирования - обнаружить и исправить ошибки, а не игнорировать их. –

+0

Я знаю это, но на данный момент я просто пытаюсь использовать его на разных сайтах, к которым у меня нет удаленного доступа. – Sim

ответ

3

Попробуйте следующее

webClient.setThrowExceptionOnFailingStatusCode(false); 

Он должен обрабатывать статус ошибки 404 (страница не найдена).

+0

nope, по-прежнему та же ошибка по-прежнему бросается – Sim

+0

Я предполагаю, что это ошибка сервера, учитывая, что это сброс соединения. Почему бы вам не сделать это внутри блока catch try и обработать его изящно? –

+0

Могу ли я его даже поймать, так как моя программа отлично продолжается после того, как будет напечатана стоп-таблица – Sim

0

Вы можете использовать HttpUnitOptions.setScriptingEnabled(true); отключить JavaScript в HttpUnit , а также HttpUnitOptions.setExceptionsThrownOnScriptError(false);

+1

[this] (http://httpunit.sourceforge.net/doc/api/com/meterware/httpunit/HttpUnitOptions.html) пакет неизвестен, как получить класс/экземпляр HttpUnitOptions? – Sim

+0

Это на самом деле из com.meterware.httpunit.HttpUnitOptions; поэтому вам нужно загрузить httpunit jar перед вызовом HttpUnitOptions.setScriptingEnabled (true); – Brijesh

+0

Как это относится к HtmlUnit? – Yura

1

HtmlPage.loadExternalJavaScriptFile() всегда будет регистрировать эту ошибку в зависимости от настроек вашей регистрации. Вам необходимо отключить ведение журнала для страницы или изменить порог.

Например, если вы используете log4j, вы можете установить свойство log4j.logger.com.gargoylesoftware.htmlunit.html.HtmlPage = FATAL

Это, однако, будет скрывать протоколирование всех ошибок авторизованы HTMLPage.

2

У меня возникла аналогичная ошибка при запуске тестовой жгуты Дженкинса после компиляции с помощью jkd1.7.0_3. Возвращение к JDK1.6.0_30 решило проблему.

0

экземпляр HtmlUnit драйвера следующим образом:

водителя = новый SilentHtmlUnitDriver (возможности);

ADD СЛЕДУЮЩЕЕ AS Вложенный класс (в том же классе вы экземпляр драйвера):

  protected class SilentHtmlUnitDriver extends HtmlUnitDriver { 
       SilentHtmlUnitDriver() { 
        super(); 
        this.getWebClient().setCssErrorHandler(new SilentCssErrorHandler()); 
        this.getWebClient().getOptions().setThrowExceptionOnFailingStatusCode(false); 
        this.getWebClient().getOptions().setThrowExceptionOnScriptError(false); 

      } 

      SilentHtmlUnitDriver(DesiredCapabilities capabilities) { 
       super(capabilities); 
       this.getWebClient().setCssErrorHandler(new SilentCssErrorHandler()); 
      } 
} 
1

Попробуйте это, чтобы отключить раздражающие предупреждения в HtmlUnit (извините, если код не совсем верно - я " перевел»ее от Clojure, но я надеюсь, что вы получите основную идею, по крайней мере):

Import java.util.logging.Logger; 
Import java.util.logging.Level; 

Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 

Посмотрите на Turning HtmlUnit Warnings off для получения дополнительной информации. Там есть более сложное решение, но этот простой работал для меня.

1

Используйте это:

LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); 
     java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 
     java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF); 
Смежные вопросы