AndroidDriver类型不是通用的;不能使用参数<mobileelement>对其进行参数化

时间:2019-01-24 21:56:50

标签: eclipse selenium automation appium

我有一个简单的代码可以自动执行手机操作,因此它可以自行打开chrome并打开google.com,但出现错误,我不确定如何解决。

我拥有所有更新的Jars

openssl rsa -in key.pub1 -pubin -pubout -out key.pub2

**“主”线程java.lang.Error中的异常:未解决的编译问题:     AndroidDriver类型不是通用的;不能使用参数对其进行参数化     AndroidDriver类型不是通用的;不能使用参数

对其进行参数化
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");
    }
}

1 个答案:

答案 0 :(得分:0)

设置Android驱动程序从其MobileElement调用中返回findElement(请参阅AndroidDriver class Javadoc in Appium's 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时,不应将泛型类型放入构造函数调用/中。用法示例,请参见Appium Github上{{1}的line 34line 54

BaseAndroidTest

因此,要解决您的问题,只需从public class BaseAndroidTest { // ... protected static AndroidDriver<AndroidElement> driver; @BeforeClass public static void beforeClass() { // ... driver = new AndroidDriver<>(service.getUrl(), capabilities); } 构造函数中删除MobileElement,然后将其保留在声明中:

new AndroidDriver

您的驱动程序应实例化。