2012-10-29 2 views
2

intellij에서 HtmlUnitDriver를 사용하여 테스트를 작성했습니다. 코드는 다음과 같습니다 내가 Gradle을 사용하는 경우빌드가 녹색이지만 java.lang.NoSuchMethodError가 나타나는 이유는 무엇입니까?

import junit.framework.Assert; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.htmlunit.HtmlUnitDriver; 

public class HtmlUnitDemo { 
    WebDriver driver; 

    public static void main(String args[]){ 
     HtmlUnitDemo obj = new HtmlUnitDemo(); 
     obj.setup(); 
     obj.openURL(); 
    } 

    public void openURL() { 

     driver.get("https://mail.google.com"); 
     driver.findElement(By.id("username")).sendKeys("xyz"); 
     driver.findElement(By.id("password")).sendKeys("pqr"); 
     driver.findElement(By.className("btn-submit")).click(); 
     Assert.assertEquals(driver.getTitle(), "CAS – Central Authentication Service"); 
    } 

    public void setup(){ 
     driver = new HtmlUnitDriver(); 
    } 
} 

이 코드 빌드. 내가 IDE에서 실행할 때, 그것은 나에게 전체 스택 추적하는

*java.lang.NoSuchMethodError: org.apache.http.conn.scheme.Scheme.<init>(Ljava/lang/String;ILorg/apache/http/conn/scheme/SchemeSocketFactory;) 

을 제공합니다

at com.gargoylesoftware.htmlunit.HttpWebConnection.createHttpClient(HttpWebConnection.java:504) 
at com.gargoylesoftware.htmlunit.HttpWebConnection.getHttpClient(HttpWebConnection.java:470) 
at com.gargoylesoftware.htmlunit.HttpWebConnection.setUseInsecureSSL(HttpWebConnection.java:659) 
at com.gargoylesoftware.htmlunit.WebClient.setUseInsecureSSL(WebClient.java:1085) 
at org.openqa.selenium.htmlunit.HtmlUnitDriver.createWebClient(HtmlUnitDriver.java:263) 
at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:129) 
at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:172) 
at org.openqa.selenium.htmlunit.HtmlUnitDriver.<init>(HtmlUnitDriver.java:168) 
at smoke.com.thoughtworks.twu.HtmlUnitDemo.setup(HtmlUnitDemo.java:30) 
at smoke.com.thoughtworks.twu.HtmlUnitDemo.main(HtmlUnitDemo.java:14) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

는이 오류를 봤 그것은 뭔가 클래스 경로에 관련된 말했다. 그러나 정확히 무엇이 이루어질 지 확신하지 못합니다. 나는이 분야에 아주 새로운 사람이다. 그래서 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+1

이는 컴파일 할 때 동일한 버전의 코드로 실행하지 않는다는 의미입니다. –

+0

어떤 IDE를 사용하고 있습니까? – sunleo

+1

스택 추적이 필요하지만 종속성에있는 jar 파일 중 하나가 잘못된 버전 인 것 같습니다. – Thilo

답변

2

NoSuchMethodError은 클래스 org.apache.http.conn.scheme.Scheme의 라이브러리가 예상과 다른 버전임을 나타낼 수 있습니다.

사용중인 Selenium 라이브러리에서 사용하는 종속성을 확인하십시오. 그것이 Maven에서 나온 것이라면 간단한 작업이 될 수 있습니다. 그렇지 않으면 웹 사이트에서 확인하십시오.

0

IntelJ IDE를 사용하는 경우. 프로젝트 세부 사항에 맞는 JDK를 제공하고 있는지 확인하십시오.
Ctrl + Alt + Shift + S -> 프로젝트 설정을 엽니 다. 프로젝트를 클릭하십시오. 거기에 지정된 JDK를 볼 수 있습니다. Project Setting page 시스템에서 JDK 경로로 이동하십시오. Windows 64 비트 버전 인 경우. 이

C 될 것입니다 : \ 프로그램 파일 \ 자바 \
는도 지정 (동일해야합니다 JDK, JRE 버전) 동일한 경로에서 해당 JRE를했는지 JDK를 확인합니다. JDK In my system

그래서 나는 jdk1.8.0_141, jre1.8.0_141을 볼 수 있습니다. Intelj에 jdk1.8.0_141을 색인했습니다.
확인할 때 해당 JRE가 표시되지 않으면 확인하십시오. IntelJ 인덱싱은 적절하지 않으며 질문에서 언급 한 오류가 발생합니다.
최신 JDK를 다운로드 할 수 있습니다. http://www.oracle.com/technetwork/java/javase/downloads/index.html
Windows를 사용하는 경우 .exe 버전의 JDK를 사용하고 시스템에서 실행하십시오. 동일한 경로에 자동으로 해당 설치를 설치합니다. 댓글에 의심을 할 수 있습니다. 당신을 도우려고 노력할 것입니다.

그런 다음 IntelJ로 돌아옵니다. 프로젝트 설정 -> 프로젝트으로 이동하십시오. 을 클릭하고 적절한 JDK를 선택하여 추가하십시오. OK을 클릭하십시오. 그런 다음 프로그램으로 이동하십시오. IntelJ가 당신의 것을 다시 색인하는 것을 볼 수 있습니다. 몇 분 정도 걸릴 수 있습니다. 그 후에 프로그램을 다시 실행하십시오.