java.lang.NoClassDefFoundError:org.openqa.selenium.android.AndroidWebDriver在使用android的WebDriver中出错
我正在尝试使用Webdriver在使用eclipse和JUnit的emulator上测试网站。 但我总是得到: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
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,这给我留下了:
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”错误