Appium:无法在连接的多个Android设备中运行脚本 [英] Appium : unable to run script in multiple android device connected

查看:24
本文介绍了Appium:无法在连接的多个Android设备中运行脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

创建了多个 appium 实例.我从控制台运行:

Created multiple instance of appium. from console i run :

node . -p 4722 -U Z*****K --chromedriver-port 9
515 -bp 2251

node . -p 4723 -U T*****K --chromedriver-port 9
516 -bp 2252

在两台设备上都创建了实例,但 URL 仅在连接的第二台设备上打开.第一台设备中的浏览器只是保持打开状态,而不会打开 url.

Instances are created on both the devices but the URL opens only on the second device connected.Browser in the first device just stays open without the url being opened.

代码:

Specflow 文件:

Specflow file :

测试功能

  Scenario: Check Home Page
        Given I am on home page
        Then My title should be 'whatever'

Steps.cs

 [Given(@"I am on home page")]
            public void GivenIAmOnHofHomePage()
            {
                var testappium = new TestAppium();
                testappium.SetUp();
                testappium.OpenHomePage();
            }

TestAppium.cs

using System;
using OpenQA.Selenium;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Interfaces;
using OpenQA.Selenium.Appium.MultiTouch;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Appium.Android;
using OpenQA.Selenium.Appium.iOS;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TechTalk.SpecFlow;


namespace Mobile.Tests.UIAutomation
{

    public class TestAppium
    {
        public static IWebDriver driver=null;

        public void SetUp()
        {
            DesiredCapabilities capabilities = new DesiredCapabilities();

            capabilities.SetCapability("device", "Android");
            capabilities.SetCapability("browserName", "chrome");
            capabilities.SetCapability("deviceName", "test");
            capabilities.SetCapability("platformName", "Android");
            capabilities.SetCapability("platformVersion", "5.0.1");
            capabilities.SetCapability("udid", EnvironmentVariables.nexus);

            driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4722/wd/hub"), capabilities, TimeSpan.FromSeconds(180));

            DesiredCapabilities capabilitiess = new DesiredCapabilities();

            capabilitiess.SetCapability("device", "Android");
            capabilitiess.SetCapability("browserName", "chrome");
            capabilitiess.SetCapability("deviceName", "Arpan Buch");
            capabilitiess.SetCapability("platformName", "Android");
            capabilitiess.SetCapability("platformVersion", "5.0.2");
            capabilitiess.SetCapability("udid", EnvironmentVariables.motog);

            driver = new RemoteWebDriver(new  Uri("http://127.0.0.1:4723/wd/hub"), capabilitiess, TimeSpan.FromSeconds(180));
       }

       public void OpenHomePage()
        {
            driver.Navigate().GoToUrl("http://www.google.com");

            Console.WriteLine("Page title is : " +driver.Title);
            Assert.IsTrue(driver.Title.Equals("Google")," Sorry , the website didnt open!!");
        }
     }
  }

在两台设备上都创建了实例,但 URL 仅在连接的第二台设备上打开.第一个设备中的浏览器只是保持打开状态,而不会打开 url.

Instances are created on both the devices but the URL opens only on the second device connected. Browser in the first device just stays open without the url being opened.

第一个设备的驱动程序实例是否被覆盖 (?).这是我作为测试人员而不是开发人员的编程限制.请帮忙!提前致谢!

Is the driver instance of the first device being overwritten (?). here is my programming limitation of being a tester and not a developer. Please Help! Thanks in advance!

推荐答案

Appium 在这方面存在问题,因为从一开始就不支持对多个 Android 设备的支持.

Appium had a problem with this as support for multiple Android devices was not a feature supported from the very beginning.

Appium 团队从这个问题开始研究这个功能.很长的线程:)一位贡献者在代码中合并了此修复以解决此问题并实现此类功能.

Appium team worked on this feature starting from this issue. Quite long thread :) A contributor merged this fix in the code to solve this and implement such a feature.

线程有点混乱,但包含很多材料.我个人决定在这种情况下不使用 Appium,因为目前还不太可靠.但是我认为在你的能力中你应该指定:

The thread is a bit confusing but contains a lot of material. Personally I decided not to use Appium in this scenario because is not so reliable at the moment. However I think that in your capabilities you should specify:

capabilitiess.SetCapability("udid", "<UDID>");
capabilitiess.SetCapability("devicePort", "<ADB-port-listening-to-device>");

最后一个能力是关键!该线程解释了很多,但基本上您应该将 ADB 用来侦听您的设备的端口号放在那里.如果您连接两台 Android 设备,则会获得两个不同的端口.

The last capability is the key! The thread explains a lot but basically you should place there the port number that ADB is using to listen to your device. If you connect two Android devices, you get two different ports.

您可能想尝试运行两个 Appium 服务器,就像我之前链接的同一个线程中所解释的那样.

You might want to try running two Appium servers like explained in the same thread I linked before.

appium -p 4725 -bp 4727 -U 02*************** --chromedriver-port 9515
appium -p 4724 -bp 4726 -U 07a************** --chromedriver-port 9516

考虑以下几点:

node . -p <appium_port> -bp <device_port> -U <serial> -g <logfile>

您的测试当然应该参考在同一台机器上运行但在两个不同端口上的这两个不同的 Appium 实例.在您的示例中,请记住为 Chromedriver 指定不同的端口

Your tests should of course refer to these two different instances of Appium running on the same machine but on two different ports. In your example remember to specify different ports for Chromedriver!

这篇关于Appium:无法在连接的多个Android设备中运行脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆