Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Appium:deviceName未找到android驱动程序,但已传递第一个可用的驱动程序_Java_Android_Selenium_Appium - Fatal编程技术网

Java Appium:deviceName未找到android驱动程序,但已传递第一个可用的驱动程序

Java Appium:deviceName未找到android驱动程序,但已传递第一个可用的驱动程序,java,android,selenium,appium,Java,Android,Selenium,Appium,我有一些AVD设备在运行。 AVD ID:Pixel_3a_API_30_x86,Pixel_4_API_26 版本:8 然后我尝试执行一些自动测试,但首先我将使用以下类从运行的Appium服务器获取AndroidDriver 如果我设置了 能力。设置能力(“deviceName”、“Pixel_3a_API_30_x86”) 然后我从设备中获取第一个可用设备,而不是具有此deviceName的设备 package x.driver; import x.config.ConfigPropert

我有一些AVD设备在运行。 AVD ID:Pixel_3a_API_30_x86,Pixel_4_API_26 版本:8

然后我尝试执行一些自动测试,但首先我将使用以下类从运行的Appium服务器获取AndroidDriver

如果我设置了 能力。设置能力(“deviceName”、“Pixel_3a_API_30_x86”) 然后我从设备中获取第一个可用设备,而不是具有此deviceName的设备

package x.driver;

import x.config.ConfigProperties;
import x.repository.testexec.AppiumAndroidUrlRepository;
import x.service.dto.testdef.DeviceDTO;
import x.service.impl.testexec.WindowsAndAndroidDriverPool;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;

import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class AndroidDriverFactory implements DriverFactory {

    private static final Logger logger = LoggerFactory.getLogger(AndroidDriverFactory.class);

    private final ConfigProperties configProperties;

    private final DeviceDTO device;
    private final String packageName;
    private final String activity;
    private final WindowsAndAndroidDriverPool windowsAndAndroidDriverPool;

    private final List<String> usedUrls = new ArrayList<>();
    private final AppiumAndroidUrlRepository appiumAndroidUrlRepository;

    public AndroidDriverFactory(ConfigProperties configProperties, DeviceDTO device, String packageName,
            String activity, WindowsAndAndroidDriverPool windowsAndAndroidDriverPool,
            AppiumAndroidUrlRepository appiumAndroidUrlRepository) {
        this.configProperties = configProperties;
        this.device = device;
        this.packageName = packageName;
        this.activity = activity;
        this.windowsAndAndroidDriverPool = windowsAndAndroidDriverPool;
        this.appiumAndroidUrlRepository = appiumAndroidUrlRepository;
    }

    @Override
    public WebDriver createDriver() throws InterruptedException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
        capabilities.setCapability("deviceName", device.getSerial());
        capabilities.setCapability("platformVersion", device.getOsVersion());
        capabilities.setCapability("platformName", device.getType());
        capabilities.setCapability("appPackage", packageName);
        capabilities.setCapability("appActivity", activity);
        //capabilities.setCapability("udid", "emulator-5556");
        // capabilities.setCapability("noReset", true);
        // capabilities.setCapability("autoGrantPermissions", true);

        String remoteDriverHost = null;
        String remoteDriverPort = null;

        List<String> androidUrls = null;
        if (this.device != null && device.getHost() != null && device.getPort() != null) {
            remoteDriverHost = this.device.getHost();
            remoteDriverPort = String.valueOf(this.device.getPort());
            // if the host and port defined then need to run the test on the defined url
            String remoteDriverUrl = "http://" + remoteDriverHost + ":" + remoteDriverPort + "/wd/hub";
            androidUrls = new ArrayList<>();
            androidUrls.add(remoteDriverUrl);
        } else {
            androidUrls = this.appiumAndroidUrlRepository.findAllByOrderByUrlOrder();
        }

        WebDriver driver = getOne(androidUrls, capabilities);
        while (driver == null && !this.usedUrls.isEmpty()) {
            this.windowsAndAndroidDriverPool.waitForDependsOnTask(this.usedUrls.get(0));
            driver = getOne(androidUrls, capabilities);
        }
        if (driver != null) {
            return driver;
        }
        throw new IllegalArgumentException("No active Appium android remote driver found: " + androidUrls);
    }

    private WebDriver getOne(final List<String> androidUrls, final Capabilities capabilities) {
        this.usedUrls.clear();
        synchronized (this.getClass()) {
            for (String url : androidUrls) {
                if (!this.windowsAndAndroidDriverPool.isRemoteDriverUrlUsed(url)) {
                    WebDriver driver = getAndroidDriverAndUse(url, capabilities);
                    if (driver != null) {
                        return driver;
                    }
                } else {
                    this.usedUrls.add(url);
                }
            }
        }
        return null;
    }

    private WebDriver getAndroidDriverAndUse(final String url, final Capabilities capabilities) {
        try {
            WebDriver driver = getAndroidDriver(url, capabilities);
            this.windowsAndAndroidDriverPool.useRemoteDriverUrl(url);
            return driver;
        } catch (Exception e) {
            logger.info(e.getMessage());
        }
        return null;
    }

    private WebDriver getAndroidDriver(final String remoteDriverUrl, final Capabilities capabilities) {
        try {
            return new AndroidDriver<>(new URL(remoteDriverUrl), capabilities);
        } catch (MalformedURLException e) {
            throw new IllegalArgumentException("Wrong Appium url!", e);
        } catch (WebDriverException e) {
            logger.info(e.getMessage());
            throw new RuntimeException("Android remote driver is not available!", e);
        }
    }
}
appium的答复:

[io.appium.java_client.android.AndroidDriver, Capabilities: {appActivity=com.android.calculator2.Calculator, appPackage=com.android.calculator2, browserName=, databaseEnabled=false, desired={browserName=, platformName=android, appActivity=com.android.calculator2.Calculator, appPackage=com.android.calculator2, deviceName=Pixel_3a_API_30_x86, platformVersion=8}, deviceApiLevel=26, deviceManufacturer=Google, deviceModel=Android SDK built for x86, deviceName=emulator-5554, deviceScreenDensity=440, deviceScreenSize=1080x2160, deviceUDID=emulator-5554, javascriptEnabled=true, locationContextEnabled=false, networkConnectionEnabled=true, pixelRatio=2.75, platform=LINUX, platformName=ANDROID, platformVersion=8.0.0, statBarHeight=66, takesScreenshot=true, viewportRect={left=0, top=66, width=1080, height=1962}, warnings={}, webStorageEnabled=false}]
正如你所看到的,我试图在Cap中传递UDID,当我这样做时,我得到了正确的设备,但它无法解决问题

[io.appium.java_client.android.AndroidDriver, Capabilities: {appActivity=com.android.calculator2.Calculator, appPackage=com.android.calculator2, browserName=, databaseEnabled=false, desired={browserName=, platformName=android, appActivity=com.android.calculator2.Calculator, appPackage=com.android.calculator2, deviceName=Pixel_3a_API_30_x86, platformVersion=8}, deviceApiLevel=26, deviceManufacturer=Google, deviceModel=Android SDK built for x86, deviceName=emulator-5554, deviceScreenDensity=440, deviceScreenSize=1080x2160, deviceUDID=emulator-5554, javascriptEnabled=true, locationContextEnabled=false, networkConnectionEnabled=true, pixelRatio=2.75, platform=LINUX, platformName=ANDROID, platformVersion=8.0.0, statBarHeight=66, takesScreenshot=true, viewportRect={left=0, top=66, width=1080, height=1962}, warnings={}, webStorageEnabled=false}]