0

JUnitでEclipseを使用してエミュレーターでWebサイトをテストするためにWebdriverを使用しようとしています。しかし、私は常に取得しています:

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
  • セレン-Java-2.21.0.jar
  • セレン-サーバー-2.21.0.jar
  • セレン-サーバー-スタンドアロン-2.0b2.jar
  • セレン-サーバー-スタンドアロン-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]"));
        }
}
4

4 に答える 4

1

私はこの問題を経験し、最終的にこれに対する解決策を得ました。

1) プロジェクトを右クリック > ビルド パス > ビルド パスの構成 > 注文とエクスポート

2) 「android_webdriver_library.jar」を選択してチェック

3)jarファイルを「Android 4.X」のすぐ下、「Android Dependencies」の上に移動します(または)最上位のどこかに配置します。

4) ボタンをクリックし、[すべて選択] をクリックして [OK] をクリックします。

プロジェクト>クリーンに移動します。テストを実行します。

これは、 「java.lang.NoClassDefFoundError: org.openqa.selenium.android.AndroidWebDriver」エラーにのみ適用されます。

于 2013-04-23T12:47:47.640 に答える
0

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();
    }

言い換えると、@Before@Testおよび@After注釈を使用しない場合は、何らかの方法でドライバーを起動する必要があることをプログラムに伝える必要があります。したがって、試すことができる他のアプローチは、テストメソッドを少し更新することです。

 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
    }
于 2012-05-23T09:48:47.490 に答える
0

しばらく時間がかかりましたが、ようやくこれを理解しました。

あなたがやっているので、私の状況はあなたの状況とは少し異なりますが:

super("my.empty.project", MyAndroidProjectActivity.class);}

私がやっている間:

super("simple.app", SimpleAppActivity.class);

これは、Web ドライバーのインストールで提供されるデフォルトの追加プロジェクトの 1 つであり、変更を加える必要があるため、引き続き適用する必要があります。my.empty.project

私がしたことは、Google Web Driver extra から両方のプロジェクトを Eclipse にインポートしたことでした。

  1. シンプルアプリ
  2. TestAnroidWebApp

最初のものは問題なく機能しましたが、2番目のものはスローされていませんでした:

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)

私が理解したのは、TestAnAndroidWebApp プロジェクトのライブラリを SimpleApp プロジェクトに追加する必要があるということでした。これらの 2 つのライブラリ エントリは次のとおりです。

 1. guava-r09.jar
 2. android_webdriver_library.jar

しかし、Android ではコピーと貼り付けほど単純ではないことがわかったので、Jar ファイルをインポートしてライブラリ リストに追加する方法については、スタック オーバーフローにすでにあるこの回答に従ってください。

これは、それらが Dalvik 変換され、私の simple.app (またはあなたの場合は my.empty.project) にバンドルされ、Android Emulator にコピーされると見なされるようにするためです。

これにより、例外を乗り越えることができました。

注:おそらく をバンドルする必要はありませんがguava-r09.jar、最初の試みでとにかくバンドルしたので、バンドルなしで再テストしていません。

于 2013-03-17T04:03:02.200 に答える
0

私は最近この問題にぶつかりました。正確な解決策が何であるかはわかりませんが、次の手順で修正されました。ライブラリがプロジェクトのサブディレクトリにあることを確認してください。私はEclipseを使用していたので、Eclipseが常にプロジェクトを再構築するとは限らないことに気付いたので、再構築する前にbin /フォルダーからapkを削除しました。その後、私は再び問題にぶつかることはありませんでした。

編集:あなたが受け取っているエラーは名前空間の問題だと思います。org.openqa.selenium.android. ライブラリ.AndroidWebDriver

この変更は、AndroidWebDriver が Google SDK を通じて公開された後に Selenium ツリーに加えられたと思います。そのため、wiki 内のほとんどのドキュメントは、現在 svn ツリーにあるものではなく、公開された jar を反映しています。

于 2012-07-24T00:22:49.573 に答える