1. 問題描述和原由
在使用Appium1.7.0及其如下版本的時候,咱們能夠直接使用以下代碼來建立一個AppiumDriver實例進行對安卓設備的操做。java
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
但在把Appium包升級到當前最新的2.0.0版本的時候,這段代碼會引起以下的一問題android
當前的pom.xml相關設置以下:記得把1.7.0改爲2.0.0或者是未來更高級版本app
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>2.0.0</version>
<del><version>1.7.0</version></del>
</dependency>
2.問題分析
究其緣由,發現Appium2.0.0把AppiumDriver這個類改爲了抽象函數,因此到致使了這個問題
public <span style="color:#ff0000;">abstract </span>class AppiumDriver extends RemoteWebDriver implements MobileDriver,
ContextAware, Rotatable, FindsByAccessibilityId, LocationContext,
DeviceActionShortcuts, TouchShortcuts, InteractsWithFiles,
InteractsWithApps, ScrollsTo {
private final static ErrorHandler errorHandler = new ErrorHandler(
new ErrorCodesMobile(), true);
private URL remoteAddress;
private RemoteLocationContext locationContext;
private ExecuteMethod executeMethod;
// frequently used command parameters
protected final String KEY_CODE = "keycode";
protected final String PATH = "path";
private final String SETTINGS = "settings";
根據2.0.0的Changelog的第一點:
Changelogless
2.0.0函數
<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>
</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>ui
3.問題解決
根據問題分析,把代碼修改以下,使用AndroidDriver而非原來的AppiumDriver。
public class NoetPadTest {
/**
* Create the test case
*
* @param testName name of the test case
*/
private <span style="color:#ff0000;">AndroidDriver </span>driver;
@Before
public void setUp() throws Exception {
// set up appium
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "NotePad.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","Android");
//capabilities.setCapability("platformVersion", "4.2");
capabilities.setCapability("platformName", "Android");
//capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.example.android.notepad");
capabilities.setCapability("appActivity", "com.example.android.notepad.NotesList");
//capabilities.setCapability("appActivity", ".NotesList");
driver = new <span style="color:#ff0000;">AndroidDriver</span>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
public void tearDown() throws Exception {
driver.quit();
}spa
---------------------
原文:https://blog.csdn.net/zhubaitian/article/details/39717889
.net