AppiumDriver升级到2.0.0版本引发的问题--Cannot instantiate the type AppiumDriver

文章详细阐述了在将Appium版本升级到2.0.0后,由于AppiumDriver变为抽象类而引发的问题,并提供了解决方案,即使用AndroidDriver替代。通过修改代码,实现对安卓设备的自动化测试。

1. 问题描述和起因

在使用Appium1.7.0及其以下版本的时候,我们可以直接使用如下代码来创建一个AppiumDriver实例进行对安卓设备的操作。

  1. driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);  
但在把Appium包升级到当前最新的2.0.0版本的时候,这段代码会引发如下的一问题


当前的pom.xml相关设置如下:记得把1.7.0改成2.0.0或者是将来更高级版本

  1. <dependency>  
  2.   <groupId>io.appium</groupId>  
  3.   <artifactId>java-client</artifactId>  
  4.   <version>2.0.0</version>  
  5.   <del><version>1.7.0</version></del>  
  6. </dependency>  

2.问题分析

究其原因,发现Appium2.0.0把AppiumDriver这个类改成了抽象函数,所以到导致了这个问题
  1. public <span style="color:#ff0000;">abstract </span>class AppiumDriver extends RemoteWebDriver implements MobileDriver,  
  2.         ContextAware, Rotatable, FindsByAccessibilityId, LocationContext,  
  3.         DeviceActionShortcuts, TouchShortcuts, InteractsWithFiles,  
  4.         InteractsWithApps, ScrollsTo {  
  5.   
  6.     private final static ErrorHandler errorHandler = new ErrorHandler(  
  7.             new ErrorCodesMobile(), true);  
  8.     private URL remoteAddress;  
  9.     private RemoteLocationContext locationContext;  
  10.     private ExecuteMethod executeMethod;  
  11.   
  12.     // frequently used command parameters  
  13.     protected final String KEY_CODE = "keycode";  
  14.     protected final String PATH = "path";  
  15.     private final String SETTINGS = "settings";  
根据2.0.0的Changelog的第一点:
[plain] view plain copy
  1. Changelog  
  2.   
  3. 2.0.0  
  4.   
  5. <ul><li><span style="font-family: Arial, Helvetica, sans-serif;">AppiumDriver is now an abstract class, use IOSDriver and AndroidDriver which both extend it. You no longer need to include the PLATFORM_NAME desired capability since it's automatic for each class. Thanks to @TikhomirovSergey for all their work</span></li></ul><span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space:pre">     </span><span style="color:#3366ff;">AppiumDriver现在变成了一个抽象类,请使用从它继承下来的IOSDriver和AndroidDriver。你不再需要加上PLATFORM_NAME这个capability,因为代码会根据你使用的是IOSDriver或者AndroidDriver来确定究竟是哪个平台。</span>  
  6. </span><ul><li><span style="font-family: Arial, Helvetica, sans-serif;">ScrollTo() and ScrollToExact() methods reimplemented</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">Zoom() and Pinch() are now a little smarter and less likely to fail if you element is near the edge of the screen. Congratulate @BJap on their first PR!</span></li></ul>  

3.问题解决

根据问题分析,把代码修改如下,使用AndroidDriver而非原来的AppiumDriver。
  1. public class NoetPadTest {  
  2.     /** 
  3.      * Create the test case 
  4.      * 
  5.      * @param testName name of the test case 
  6.      */  
  7.     private <span style="color:#ff0000;">AndroidDriver </span>driver;  
  8.   
  9.     @Before  
  10.     public void setUp() throws Exception {  
  11.         // set up appium  
  12.         File classpathRoot = new File(System.getProperty("user.dir"));  
  13.         File appDir = new File(classpathRoot, "apps");  
  14.         File app = new File(appDir, "NotePad.apk");  
  15.         DesiredCapabilities capabilities = new DesiredCapabilities();  
  16.         capabilities.setCapability("deviceName","Android");  
  17.         //capabilities.setCapability("platformVersion", "4.2");  
  18.         capabilities.setCapability("platformName""Android");  
  19.         //capabilities.setCapability("app", app.getAbsolutePath());  
  20.         capabilities.setCapability("appPackage""com.example.android.notepad");  
  21.         capabilities.setCapability("appActivity""com.example.android.notepad.NotesList");  
  22.         //capabilities.setCapability("appActivity", ".NotesList");  
  23.         driver = new <span style="color:#ff0000;">AndroidDriver</span>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);  
  24.     }   
  25.   
  26.     @After  
  27.     public void tearDown() throws Exception {  
  28.         driver.quit();  
  29.     }  


 

作者

自主博客

微信

优快云

天地会珠海分舵

http://techgogogo.com


服务号:TechGoGoGo

扫描码:

http://blog.youkuaiyun.com/zhubaitian



### JPBC 2.0.0 版本的 `jpbc-pbc.dll` 文件下载与安装位置 JPBC(Java Pairing-Based Cryptography Library)是一个用于实现基于配对密码学的库。在某些情况下,JPBC依赖于本地库文件(如`jpbc-pbc.dll`),以提高性能或支持特定功能。以下是关于JPBC 2.0.0版本中`jpbc-pbc.dll`文件的下载和安装位置的详细说明[^1]。 #### 下载JPBC 2.0.0版本的`jpbc-pbc.dll` JPBC 2.0.0版本的官方发布通常包含预编译的二进制文件,包括`jpbc-pbc.dll`。可以通过以下方式获取: 1. **从GitHub仓库下载** JPBC的源代码和预编译二进制文件通常托管在其官方GitHub仓库中。访问JPBC的GitHub页面,查找对应版本的发布页面(Releases),下载包含`jpbc-pbc.dll`的压缩包[^2]。 2. **从第三方镜像站点下载** 如果官方仓库中未提供预编译的DLL文件,可以尝试从可信的第三方镜像站点下载。确保选择与JPBC 2.0.0版本兼容的DLL文件。 3. **自行编译生成DLL文件** 如果无法找到预编译的DLL文件,可以克隆JPBC的源代码仓库,并使用CMake或其他构建工具自行编译生成`jpbc-pbc.dll`文件。具体步骤如下: - 安装PBC库及其依赖项。 - 使用CMake配置JPBC项目,并生成DLL文件。 #### 安装JPBC 2.0.0版本的`jpbc-pbc.dll` 安装`jpbc-pbc.dll`文件时,需要确保Java运行时环境能够正确加载该文件。以下是常见的安装方法: 1. **设置系统环境变量** 将`jpbc-pbc.dll`文件放置在系统的`PATH`环境变量指定的目录下。例如,在Windows系统中,可以将文件放置在`C:\Windows\System32`目录下。 2. **通过代码动态加载DLL文件** 在Java代码中,可以通过`System.setProperty`方法设置本地库路径,并使用`System.loadLibrary`加载DLL文件。示例代码如下: ```java System.setProperty("java.library.path", "path/to/dll"); System.loadLibrary("jpbc-pbc"); ``` 3. **将DLL文件放置在工作目录中** 将`jpbc-pbc.dll`文件直接放置在Java应用程序的工作目录中,Java运行时会自动加载该文件。 #### 常见问题与解决方法 - **错误:找不到`jpbc-pbc.dll`** 这通常是由于系统无法定位到DLL文件引起的。请检查是否正确设置了`java.library.path`,或者将DLL文件放置在Java运行时的工作目录中[^3]。 - **错误:版本不兼容** 确保使用的JPBC库版本与`jpbc-pbc.dll`文件版本一致。如果版本不匹配,可能会导致加载失败。 ```java // 示例代码:加载JPBC库并初始化 try { System.loadLibrary("jpbc-pbc"); // 初始化JPBC库 } catch (UnsatisfiedLinkError e) { System.err.println("无法加载jpbc-pbc.dll: " + e.getMessage()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值