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



创建了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仅在连接的第二个设备上打开。第一个设备中的浏览器只是保持打开,而没有打开url。

代码:

Specflow文件:

测试功能

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

步骤.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。

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

Appium有一个问题,因为从一开始就不支持多个Android设备。

Appium团队从这个问题开始研究这个功能。相当长的线程:)一个贡献者在代码中合并了这个修复程序来解决这个问题并实现这样的功能。

该怎么办

这条线有点令人困惑,但包含了很多材料。就我个人而言,我决定在这种情况下不使用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指定不同的端口

最新更新