java.lang.NoClassDefFoundError:org.openqa.selenium.android.AndroidWebDriver在使用android的WebDriver中出错

java.lang.NoClassDefFoundError:org.openqa.selenium.android.AndroidWebDriver在使用android的WebDriver中出错,java,android,webdriver,selenium-webdriver,junit4,Java,Android,Webdriver,Selenium Webdriver,Junit4,我正在尝试使用Webdriver在使用eclipse和JUnit的emulator上测试网站。 但我总是得到: java.lang.NoClassDefFoundError: org.openqa.selenium.android.AndroidWebDriver at my.empty.project.test.SdkDemoTest.setUp(SdkDemoTest.java:22) at android.test.AndroidTestRunner.runTest(AndroidTest

我正在尝试使用Webdriver在使用eclipse和JUnit的emulator上测试网站。 但我总是得到:

java.lang.NoClassDefFoundError: org.openqa.selenium.android.AndroidWebDriver
at my.empty.project.test.SdkDemoTest.setUp(SdkDemoTest.java:22)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:545)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
在我添加的Java构建路径引用库中:

  • android_webdriver_library.jar
  • android_webdriver_library-srcs.jar
  • 番石榴-12.0.jar
  • selenium-java-2.21.0.jar
  • selenium-server-2.21.0.jar
  • selenium-server-standalone-2.0b2.jar
  • selenium-server-standalone-2.21.0.jar
代码如下。 是否有人有这样的问题,也许可以帮助解决

提前谢谢

package my.empty.project.test;
import android.test.ActivityInstrumentationTestCase2;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.android;
import org.openqa.selenium.android.AndroidWebDriver;
import my.empty.project.MyAndroidProjectActivity;
public class SdkDemoTest extends ActivityInstrumentationTestCase2<MyAndroidProjectActivity>{
    private WebDriver driver;
public SdkDemoTest() {
    super("my.empty.project", MyAndroidProjectActivity.class);}
     @Override
          protected void setUp() throws Exception {
 driver = new AndroidWebDriver(getActivity());
        }
@Override
        protected void tearDown() {
           driver.quit();
        }
        public void testSDKdemoprep() {
            driver.get("http://sdkdemoprep.playphone.pluto.vn.ua/");
            WebElement element = driver.findElement(By.xpath("/html/body/img"));
            element.click();
            element = driver.findElement(By.xpath("/html/body/div[3]/div/div[9]/div[7]/div/div[2]/div/div[2]/div/div[2]"));
        }
}
包my.empty.project.test;
导入android.test.ActivityInstrumentationTestCase2;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.android;
导入org.openqa.selenium.android.AndroidWebDriver;
导入my.empty.project.MyAndroidProjectActivity;
公共类SdkDemoTest扩展了ActivityInstrumentationTestCase2{
私有网络驱动程序;
公共SdkDemoTest(){
super(“my.empty.project”,MyAndroidProjectActivity.class);}
@凌驾
受保护的void setUp()引发异常{
driver=新的AndroidWebDriver(getActivity());
}
@凌驾
受保护的void拆卸(){
driver.quit();
}
public void testSDKdemoprep(){
驱动程序。获取(“http://sdkdemoprep.playphone.pluto.vn.ua/");
WebElement=driver.findElement(By.xpath(“/html/body/img”);
元素。单击();
element=driver.findElement(By.xpath(“/html/body/div[3]/div/div[9]/div[7]/div/div[2]/div/div[2]”);
}
}

假设您正在使用JUnit。尝试稍微更改一个测试:

@Before
@Override
      protected void setUp() throws Exception {
      driver = new AndroidWebDriver(getActivity());
    }

@Test
public void testSDKdemoprep() {
        driver.get("http://sdkdemoprep.playphone.pluto.vn.ua/");
        WebElement element = driver.findElement(By.xpath("/html/body/img"));
        element.click();
        element = driver.findElement(By.xpath("/html/body/div[3]/div/div[9]/div[7]/div/div[2]/div/div[2]/div/div[2]"));
    }

@After
@Override
    protected void tearDown() {
       driver.quit();
    }
 public void testSDKdemoprep() {
        setUp(); // Here you are telling to start the driver
        driver.get("http://sdkdemoprep.playphone.pluto.vn.ua/");
        WebElement element = driver.findElement(By.xpath("/html/body/img"));
        element.click();
        element = driver.findElement(By.xpath("/html/body/div[3]/div/div[9]/div[7]/div/div[2]/div/div[2]/div/div[2]"));
        tearDown(); // stop the driver
    }
换句话说:如果不使用
@Before
@Test
@After
注释,则必须以某种方式告诉程序必须以某种方式启动驱动程序。因此,您可以尝试的另一种方法是稍微更新测试方法:

@Before
@Override
      protected void setUp() throws Exception {
      driver = new AndroidWebDriver(getActivity());
    }

@Test
public void testSDKdemoprep() {
        driver.get("http://sdkdemoprep.playphone.pluto.vn.ua/");
        WebElement element = driver.findElement(By.xpath("/html/body/img"));
        element.click();
        element = driver.findElement(By.xpath("/html/body/div[3]/div/div[9]/div[7]/div/div[2]/div/div[2]/div/div[2]"));
    }

@After
@Override
    protected void tearDown() {
       driver.quit();
    }
 public void testSDKdemoprep() {
        setUp(); // Here you are telling to start the driver
        driver.get("http://sdkdemoprep.playphone.pluto.vn.ua/");
        WebElement element = driver.findElement(By.xpath("/html/body/img"));
        element.click();
        element = driver.findElement(By.xpath("/html/body/div[3]/div/div[9]/div[7]/div/div[2]/div/div[2]/div/div[2]"));
        tearDown(); // stop the driver
    }

我最近也遇到了这个问题。我不确定确切的解决方案是什么,但下面的步骤为我解决了这个问题。确保库位于项目的子目录中。自从我使用eclipse以来,我注意到eclipse并不总是重建项目,所以我在重建之前从bin/文件夹中删除了apk。在那之后,我再也没有碰到这个问题了

编辑: 我相信您收到的错误是名称空间问题。应该是: org.openqa.selenium.android..AndroidWebDriver


我认为这是在AndroidWebDriver通过Google SDK发布后对selenium树所做的更改,因此wiki中的大多数文档反映的是已发布的jar,而不是svn树中当前的jar。

我花了一段时间,但我终于找到了答案

尽管我的情况与你的略有不同,因为你在做:

super("my.empty.project", MyAndroidProjectActivity.class);}
当我在做:

super("simple.app", SimpleAppActivity.class);
这是Web驱动程序安装中提供的默认额外项目之一,它应该仍然适用,因为您需要修改
my.empty.project

我所做的是将Google Web驱动程序中的两个项目额外导入Eclipse,这给我留下了:

  • 单纯形
  • TestAnAnroidWebApp
  • 第一个工作正常,但第二个工作正常

    java.lang.NoClassDefFoundError: org.openqa.selenium.android.AndroidWebDriver
    at simple.app.test.SimpleGoogleTest.setUp(SimpleGoogleTest.java:21)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
    
    我发现我必须将TestAndRoidWebApp项目中的库添加到SimpleApp项目中。这两个图书馆条目是:

     1. guava-r09.jar
     2. android_webdriver_library.jar
    
    但是,正如我在Android上发现的那样,它并不像复制和粘贴那么简单,所以我所做的就是按照下面的方法导入Jar文件并将它们添加到我的库列表中

    这样一来,它们将被视为Dalvik转换并捆绑到my simple.app(在您的例子中是my.empty.project)中,然后复制到Android Emulator中

    这让我通过了异常


    注意:可能不需要捆绑
    番石榴-r09.jar
    ,但我在最初尝试时就这么做了,没有它也没有重新测试过。

    我经历了这个问题,最终找到了解决办法

    1) 右键单击项目>生成路径>配置生成路径>顺序和 出口

    2) 选择并选中“android\u webdriver\u library.jar”

    3) 将jar文件移到“Android 4.X”下方和“Android”上方 “依赖项”(或)将其放在最高顺序的某个位置

    4) 单击按钮“全选”并确定

    进入项目>清洁;现在运行测试

    这仅适用于“java.lang.NoClassDefFoundError:org.openqa.selenium.android.AndroidWebDriver”错误