Appium : unable to run script in multiple android device connected

て烟熏妆下的殇ゞ 提交于 2019-12-12 07:27:55

问题


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

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.

Code :

Specflow file :

Test.feature

  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!!");
        }
     }
  }

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!


回答1:


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

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.

What to do

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>");

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.

More Appium instances

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

Considering the following:

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

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!



来源:https://stackoverflow.com/questions/28768576/appium-unable-to-run-script-in-multiple-android-device-connected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!