1

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 は接続されている 2 番目のデバイスでのみ開きます。最初のデバイスのブラウザは、URL が開かれずに開いたままになります。

コード :

Specflow ファイル:

テスト機能

  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 は接続された 2 番目のデバイスでのみ開きます。最初のデバイスのブラウザは、URL が開かれずに開いたままになります。

最初のデバイスのドライバー インスタンスが上書きされていますか (?)。これが、開発者ではなくテスターであるという私のプログラミングの制限です。助けてください!前もって感謝します!

4

1 に答える 1

0

複数の Android デバイスのサポートは当初からサポートされていなかった機能であるため、Appium にはこれに関する問題がありました。

Appium チームは、この問題からこの機能に取り組みました。かなり長いスレッド :) 寄稿者がこの修正をコードにマージして、これを解決し、そのような機能を実装しました。

何をすべきか

スレッドは少しわかりにくいですが、多くの資料が含まれています。個人的には、現時点では信頼性が低いため、このシナリオでは Appium を使用しないことにしました。ただし、あなたの能力で指定する必要があると思います:

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

最後の能力がカギ!スレッドは多くのことを説明していますが、基本的には、ADB がデバイスをリッスンするために使用しているポート番号をそこに配置する必要があります。2 つの Android デバイスを接続すると、2 つの異なるポートが得られます。

より多くの Appium インスタンス

以前にリンクした同じスレッドで説明されているように、2 つの 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>

もちろん、テストでは、同じマシン上で 2 つの異なるポートで実行されているこれら 2 つの異なる Appium インスタンスを参照する必要があります。あなたの例では、 Chromedriver に異なるポートを指定することを忘れないでください!

于 2015-03-02T12:41:10.640 に答える