Тип AndroidDriver не является универсальным; не может быть параметризовано аргументами <MobileElement> - PullRequest
0 голосов
/ 25 января 2019

У меня есть простой код для автоматизации моего телефона, чтобы он сам открыл chrome и открыл google.com, но я получаю сообщение об ошибке, которое не знаю, как исправить.

У меня есть всеобновленный Jars

package browser_tests;

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

import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.MobileElement;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;

public class ChromeTest {

    public static void main(String[] args) {

        //Set the Desired Capabilities
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("deviceName", "My Phone");
        caps.setCapability("udid", "77d1232f"); //Give Device ID of your mobile phone
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "8.0");
        caps.setCapability("browserName", "Chrome");
        caps.setCapability("noReset", true);

        //Set ChromeDriver location
        System.setProperty("webdriver.chrome.driver","C:\\selenium_drivers\\chromedriver.exe");

        //Instantiate Appium Driver
        AndroidDriver<MobileElement> driver = null;
        try {
            driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"), caps);

        } catch (MalformedURLException e) {
            System.out.println(e.getMessage());
        }

        //Open URL in Chrome Browser
        driver.get("http://www.google.com");
    }
}

** Исключение в потоке "main" java.lang.Error: Неразрешенные проблемы компиляции: Тип AndroidDriver не является универсальным;он не может быть параметризован аргументами. Тип AndroidDriver не является универсальным;он не может быть параметризован аргументами

at browser_tests.ChromeTest.main(ChromeTest.java:31)**

1 Ответ

0 голосов
/ 25 января 2019

Настройка драйвера Android для возврата MobileElement из его вызовов findElement не является ошибкой (см. Класс Javadoc AndroidDriver в Appium Github ), поэтому мы можем исключить это как проблему.

/**
 * Android driver implementation.
 *
 * @param <T> the required type of class which implement {@link org.openqa.selenium.WebElement}.
 *           Instances of the defined type will be returned via findElement* and findElements*.
 *           Warning (!!!). Allowed types:
 *           {@link org.openqa.selenium.WebElement}
 *           {@link org.openqa.selenium.remote.RemoteWebElement}
 *           {@link io.appium.java_client.MobileElement}
 *           {@link io.appium.java_client.android.AndroidElement}
 */
public class AndroidDriver<T extends WebElement>

Но ваша проблема в том, что универсальный тип не должен помещаться в вызов конструктора / при вызове new AndroidDriver.См. line 34 и line 54 из BaseAndroidTest на Appium's Github, например, для использования.

public class BaseAndroidTest {
    // ...
    protected static AndroidDriver<AndroidElement> driver;

    @BeforeClass public static void beforeClass() {
        // ...
        driver = new AndroidDriver<>(service.getUrl(), capabilities);
}

Таким образом, чтобы исправить вашу проблему, просто удалите MobileElement из конструктора new AndroidDriver, но оставьте его в объявлении:

//Instantiate Appium Driver
AndroidDriver<MobileElement> driver;
try {
   driver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), caps);
} catch (MalformedURLException e) {
    System.out.println(e.getMessage());
}

Ваш драйвер должен быть создан.

...