“类型org.openqa.selenium.remote.http.HttpClient $ Factory无法解析。” selenium脚本中的错误消息

时间:2016-07-08 07:17:17

标签: android eclipse selenium-webdriver jar appium

我正在尝试使用eclipse和Appium上的selenium webdriver为Android应用程序构建测试框架。我没有使用Maven。启动应用程序的初始脚本如下:

package executionEngine;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import io.appium.java_client.android.AndroidDriver;

public class DriverScript {
	
	public static AndroidDriver driver = null;
	


	public static void main(String[] args) throws MalformedURLException {
		// TODO Auto-generated method stub
		

		File app = new File(System.getProperty("user.dir")+"\\BP_QASTG.apk");
		
		// Created object of DesiredCapabilities class.
		
		  DesiredCapabilities capabilities = new DesiredCapabilities();
		  //capabilities.setCapability(CapabilityType.BROWSER_NAME,"");

		  // Set android deviceName desired capability. Set your device name.
		  capabilities.setCapability("deviceName", "Galaxy Tab A");


		  // Set android VERSION desired capability. Set your mobile device's OS version.
		  capabilities.setCapability(CapabilityType.VERSION, "6.0.2");

		  // Set android platformName desired capability. It's Android in our case here.
		  capabilities.setCapability("platformName", "Android");

		  // Set android appPackage desired capability. It is

		  capabilities.setCapability("appPackage", "com.rivigo.zoombp.rivigozoombpapp");

		  // Set android appActivity desired capability. It is

		  capabilities.setCapability("appActivity", "com.rivigo.zoombp.rivigozoombpapp.activity.Activity.RivigoHomeActivity");
		  capabilities.setCapability("app", app.getAbsolutePath());

		  // Set appium server address and port number in URL string.
		  //AndroidDriver  driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
	  driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
	  //driver = (AndroidDriver)((new URL("http://127.0.0.1:4723/wd/hub"), capabilities));    		  
		  driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

	}

}

在上面的代码中,我声明URL的行标记为RED并且将鼠标悬停在它上面显示以下消息:“类型org.openqa.selenium.remote.http.HttpClient $ Factory无法解析它是从所需的.class文件间接引用的“

我已经看到许多答案要求添加所需的jar文件;但我确定我已经添加了所有需要的jar文件。如果有人能指出我可能错过的特定jar文件会很棒,如果这确实是问题,那么我可以单独下载并添加它。

我已经看到其他答案要求删除并重新添加JRE系统库或关闭并修复项目等,这对我来说无效。

我也尝试过eclipse-neon和eclipse-mars版本。 请询问您需要的任何细节,

我被封锁了很长一段时间, 对此的帮助将不胜感激,

谢谢, 拉胡

10 个答案:

答案 0 :(得分:2)

在使用自动化框架时,我遇到了类似的异常,该框架旨在用作UI(移动和Web)和AIP​​自动化的基础框架。我使用的技术包括用于界面和移动自动化的硒Web驱动程序和appium。这是一个Maven项目,最终我遇到了一堆依赖项。当我花大量时间研究异常时,发现根本原因是依赖冲突,因为存在很多依赖,其中包括相同工件的不同版本。在这种情况下,冲突中的依赖关系是“ com.squareup.okhttp3”,它是我在POM中明确定义的,并且相同的依赖关系也是selenium-java的一部分。请尝试以下解决方案,并希望它可以工作:

例外:

 Exception in thread "main" java.lang.NoClassDefFoundError: okhttp3/ConnectionPool
    at org.openqa.selenium.remote.internal.OkHttpClient$Factory.<init>(OkHttpClient.java:116)
    at org.openqa.selenium.remote.http.HttpClient$Factory.createDefault(HttpClient.java:66)
    at org.openqa.selenium.remote.HttpCommandExecutor.<clinit>(HttpCommandExecutor.java:47)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:95)
    at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:94)
    at nz.co.flexicards.automation.framework.common.Common.BaseMobile.main(BaseMobile.java:62)
Caused by: java.lang.ClassNotFoundException: okhttp3.ConnectionPool
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

Process finished with exit code 1

解决方案:

  1. 我从POM.xml中删除了okhttp3的显式依赖项
 <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.11.0</version>
            <scope>test</scope>
        </dependency>
  1. 将Java-client(appium-io)依赖项移至POM.xml的依赖项列表中
<dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.2.0</version>
        </dependency>

答案 1 :(得分:1)

在创建驱动程序对象之前尝试以下代码。 System.setProperty("webdriver.http.factory", "apache");

答案 2 :(得分:0)

这需要

  

commons-validator.jar

其中包含一组用于执行常见http和其他用户请求和验证的方法。

并且现在更新您的硒罐2.5倍或更多

答案 3 :(得分:0)

当我按照以下步骤操作时,问题就解决了,

  • 创建了一个新项目
  • 添加了Selenium(2.53.1),gson(2.2.4-sources)和javaclient(4.0.0)jar

以前我添加了不同版本的java客户端jar;我之前没有添加任何gson jar。 也许这些变化解决了我的问题。 (我不确定)

此致 拉胡

答案 4 :(得分:0)

今天出现了这个问题。

我刚刚将java-client的版本从5.0.0切换到1.2.1,发现问题已解决。

希望这会有所帮助。

答案 5 :(得分:0)

将以下maven依赖项添加到您的pom.xml以解决此问题。

Alias

答案 6 :(得分:0)

java客户端jar可能有问题。

将java-client-7.0.0版本更改为java-client-3.2.0之后,我的问题解决了。

答案 7 :(得分:0)

我删除了我拥有的所有外部库,然后添加了 java-client / 7.0.0。 它有您需要的任何东西,然后我的项目就起作用了。

https://jar-download.com/artifacts/io.appium/java-client/7.0.0/source-code

答案 8 :(得分:-1)

添加&#34; selenium-remote-driver&#34;解决了这个问题

答案 9 :(得分:-1)

appium,selenium,okhttp在一起很开心,请检查我的回答: Appium throws an error because of the driver