Appium:无法在多个Android设备连接中运行脚本

时间:2015-02-27 15:27:27

标签: android selenium-webdriver appium selendroid

创建了appium的多个实例。 从控制台运行:

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仅在连接的第二台设备上打开。第一台设备中的浏览器在没有打开网址的情况下保持打开状态。

代码:

Specflow文件:

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

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

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

1 个答案:

答案 0 :(得分:0)

Appium遇到了问题,因为从一开始就支持多个Android设备不支持这项功能。

Appium团队从this issue开始研究此功能。相当长的线程:) 贡献者在代码中合并this fix以解决此问题并实现此功能。

怎么做

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

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

最后一项功能是关键!该线程解释了很多,但基本上你应该在那里放置ADB用来收听你的设备的端口号。如果连接两个Android设备,则会有两个不同的端口。

更多Appium实例

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

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指定不同的端口