t.me/atinfo_chat Telegram группа по автоматизации тестирования

org.openqa.selenium.json.JsonException когда запускаешь пустой тест с desired capabilities

java
maven
testng
appium
mobile
Теги: #<Tag:0x00007f21d6767a10> #<Tag:0x00007f21d67678a8> #<Tag:0x00007f21d6767718> #<Tag:0x00007f21d6767588> #<Tag:0x00007f21d67673f8>

(Oleksandr Molodetskyi) #1

После долгого перерыва возникла необходимость вспомнить об Аppium.
Скачал и установил последний appium server (v1.13.0).
Создал проект и сконфигурировал его мавеном, чтобы использовать последние java-client для appium, testng, selenium-java и selenium-server. Вот pom file:

Сводка
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Appiumudemy</groupId>
  <artifactId>appiumudemy</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>appiumudemy</name>
  <dependencies>
  <!-- https://mvnrepository.com/artifact/io.appium/java-client -->
<dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>7.0.0</version>
</dependency>
<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>6.8</version>
			<scope>test</scope>
		</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
</dependency>
		<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>3.141.59</version>
</dependency>

  </dependencies>
</project>

Создал тест, который ничего не делает, просто там прописаны desired capabilities и AndroidDriver.
Вот код:

Сводка

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.Test;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;

public class Appiumcapabilities {
	@Test
	public void appiumTest() throws MalformedURLException {

		DesiredCapabilities cap = new DesiredCapabilities();
		cap.setCapability(MobileCapabilityType.DEVICE_NAME, "j7xelte");
		cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.0");
		cap.setCapability("appPackage", "com.wosh.wosh");
		AndroidDriver<MobileElement> driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"),
				cap);
	}
}

Запускаю, получаю такую ошибку:

FAILED: appiumTest
org.openqa.selenium.json.JsonException: Unable to determine type from: /. Last 41 characters read: {
  "desiredCapabilities": {
    "app": /
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'Alexanders-MacBook-Pro.local', ip: '192.168.1.58', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.6', java.version: '1.8.0_131'
Driver info: driver.version: AndroidDriver
	at org.openqa.selenium.json.JsonInput.peek(JsonInput.java:122)
	at org.openqa.selenium.json.JsonTypeCoercer.lambda$null$6(JsonTypeCoercer.java:140)
	at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:126)
....

Я понимаю в принципе в чем проблема - почему-то в json файле, который формируется для передачи на appium server есть ошибка - там где должно писаться app стоит символ / - что вызывает нечитаемость json. Я не могу понять 1) с чего вдруг эта ошибка - я вообще не задаю app, я использую appPackage вместо этого. Но я пробовал задавать любой app - как через строку к приложению “~//Downloads//app-wosher-release-10.apk” так и создавая объект File для этого файла и указывая в app capability getAbsolutePath() для него - всегда точно такая же ошибка
2) я не могу понять как исправить эту ошибку.
Гугл уже затер до дыр в поисках решения. Надеюсь кто-то сталкивался с этой ошибкой и сможет мне помочь тут.


#2

a pochemu dva slasha v puti?


(Vladislav Sobol) #3

Аппиуму не понятно это “~//Downloads//app-wosher-release-10.apk”
попробуйте дать ему полный путь “Downloads/app-wosher-release-10.apk” , ну или какой там у вас полный путь выходит


(Oleksandr Molodetskyi) #4

escape вроде нужен для /
но я попробовал и cap.setCapability(“app”, “/Users/alexander/Downloads/app-wosher-release-10.apk”); и cap.setCapability(“app”, “//Users//alexander//Downloads//app-wosher-release-10.apk”); - все равно такая же ошибка


(Oleksandr Molodetskyi) #5

не похоже, чтобы дело в пути - но я пробовал и cap.setCapability("app", "//Users//alexander//Downloads//app-wosher-release-10.apk"); и

File f = new File("/Users/alexander/Downloads/app-wosher-release-10.apk");
		cap.setCapability("app", f.getAbsolutePath());

всегда такая же ошибка
Не похоже что проблема именно в неправильном пути к файлу - ошибка возникает на этапе создания/валидации json документа для сервера. Даже если бы у меня был ошибочный путь - json файл был бы корректный и я бы получил уже ошибку от appium сервера, что он не может найти app


(Vladislav Sobol) #6

Попробуйте вот так:

path = "/Users/alexander/Downloads/app-wosher-release-10.apk"
File appDir;
appDir = new File(path);
capabilities.setCapability(MobileCapabilityType.APP, appDir.getAbsolutePath())

(Oleksandr Molodetskyi) #7

попробовал - аналогичная проблема. Я еще попробовал просто через Appium Desktop запустить с теми же параметрами - все работает. Так что проблема какая-то в конфигурации appium java-client или selenium-java или их совместимости.
Вот если ввести тут вручную - все работает, запускается. Те же параметры, что я пишу в тесте для того же приложения и того же девайса


(Vladislav Sobol) #8

Что ж, попробуйте в POM.xml проапдейтить версии Аппиума и Селенума,
попробуйте вот так.

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-nop</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-jdk14</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

(Oleksandr Molodetskyi) #9

у меня именно такие версии и стоят в POM. Единственное не было таких exclusions. я добавли рефрешнул проект и проранил - та же ошибка. А можно как-то подсунуть мой json файл с desired capabilities, вместо того чтобы задавать их в коде?


(Vasiliy Rakshin) #10

http://appium.io/docs/en/writing-running-appium/default-capabilities-arg/