【问题标题】:selenium ios-driver C#硒 ios 驱动程序 C#
【发布时间】:2018-06-16 03:06:40
【问题描述】:

我正在尝试新的硒 ios-driver 。我有一个混合应用程序,特别想测试以下代码

 DesiredCapabilities cap = IOSCapabilities.iphone("InternationalMountains", "1.1");

但是,这个网站上的代码似乎是 JAVA。

我们可以使用 C# selenium API 与 ios-driver 一起使用吗?我试着打电话

driver = new RemoteWebDriver(new Uri("http://www:4444/wd/hub"), DesiredCapabilities.IPhone());

它是否提供任何方式来启动应用程序并使用 C# selenium API 进行测试?

【问题讨论】:

    标签: c# ios selenium


    【解决方案1】:

    您是否设置了 Appium Server 以接收连接?

    Appium 既是一个可以与项目中的设备交互的 WebDriver,也是一个将项目连接到物理设备或模拟器的服务器。

    您必须将 Appium 服务器作为侦听器运行并设置您的 Capabilities 以连接到它。这将启动应用程序并执行您的测试。

    除此之外还有很多其他功能,但这里有一个设置,您可以尝试让您顺利上路:

    在 WebDriver 支持类中,使用 [BeforeScenario] 标签在测试前执行此代码。这有一个 Sauce Labs 实现。

    [BeforeScenario]
        public void BeforeScenario()
        {
            var name = Locale == "sauce" ? "AppiumSauceDriver" : "AppiumDriver";
            InitializeServiceLocator();
            if (WebDriver == null)
            {
                InitializeWebDriver(name);
            }
    
            ObjectContainer.RegisterInstanceAs(WebDriver);
    
            if (WebDriver != null)
            {
                Console.WriteLine("Driver Already Exists");
            }
        }
    

    然后您需要填充 InitializeServiceLocator() 方法。这里有一个设备选择器方法,除了设置名称之外什么都不做。您可以将其硬编码为您的能力。

    private static void InitializeServiceLocator()
        {
            if (ServiceLocator == null)
            {
                var ip = "";
                var deviceType = TestSetupHelper.DeviceSelector["iphone7"];
                var capabilities = TestSetupHelper.SetAppiumCababilities(deviceType, Locale);
                string server = MSTestContextSupport.GetRunParameter("appiumServer");
                var port = Convert.ToInt32(MSTestContextSupport.GetRunParameter("appiumPort"));
                if (Locale != "sauce")
                {
                    ip = TestSetupHelper.GetComputerIpAddress(server, port, true);
                }
    
                var kernel = new StandardKernel();
    
                kernel.Bind<IOSDriver<AppiumWebElement>>().ToConstructor(x => new IOSDriver<AppiumWebElement>(new Uri("http://" + ip + ":" + port + "/wd/hub"), capabilities, TimeSpan.FromMinutes(10))).Named("AppiumDriver");
                kernel.Bind<IOSDriver<AppiumWebElement>>().ToConstructor(x => new IOSDriver<AppiumWebElement>(new Uri("http://ondemand.saucelabs.com:80/wd/hub"), capabilities, TimeSpan.FromMinutes(10))).Named("AppiumSauceDriver");
    
                ServiceLocator = new NinjectServiceLocator(kernel);
                Microsoft.Practices.ServiceLocation.ServiceLocator.SetLocatorProvider(() => ServiceLocator);
            }
        }
    

    从这里你需要设置你的能力。下面的方法是我的做法。

     public static DesiredCapabilities SetAppiumCababilities(string deviceType, string locale, bool realDevice = false, string udid = "FAKEUDIDFOREXAMPLE")
        {
            string appiumAppFilePath = MSTestContextSupport.GetRunParameter("appiumAppFilePath");
    
            //Universal Capabilities
            capabilities.SetCapability("platformName", "iOS");
            capabilities.SetCapability("deviceName", deviceType);
            capabilities.SetCapability("automationName", "XCUITest");
            capabilities.SetCapability("app", appiumAppFilePath);
            capabilities.SetCapability("xcodeOrgId", "GET_THIS_FROM_APP_DEV");
            capabilities.SetCapability("xcodeSigningId", "iPhone Developer");
            capabilities.SetCapability("noReset", true);
            capabilities.SetCapability("newCommandTimeout", 80);
    
            if (locale == "sauce")//Sauce specific capabilities
            {
                capabilities.SetCapability("appiumVersion", "1.7.2");
                capabilities.SetCapability("name", MSTestContextSupport.GetRunParameter("appiumJobName"));
                capabilities.SetCapability("username", MSTestContextSupport.GetRunParameter("sauceId"));
                capabilities.SetCapability("accessKey", MSTestContextSupport.GetRunParameter("sauceKey"));
                capabilities.SetCapability("tunnel-identifier", MSTestContextSupport.GetRunParameter("sauceTunnel"));
                capabilities.SetCapability("browserName", "");
                capabilities.SetCapability("platformVersion", "11.2");
            }
            else//Local specific capabilities
            {
                capabilities.SetCapability("platformVersion", "11.3");
            }
    
            if (realDevice)//Sauce real device testing will not need this. This is for Local Real Device testing only
            {
                capabilities.SetCapability("udid", udid);
            }
    
            return capabilities;
        }
    

    任何引用 GetRunParameter 的内容都是从 .runsettings 文件中获取值。

    例子:

    <TestRunParameters>
        <Parameter name="appiumJobName" value="OBI App Automated Test"/>
    </TestRunParameters>
    

    您必须将所有内容添加到您正在使用的 .runsettings 文件中,以运行您想要从那里获取的项目。如果您不想通过 runsettings 文件,您可以对其进行硬编码,但我更喜欢这样做。您可以根据您选择的 runsettings 文件以这种方式进行更改。

    然后你必须定义 TestSetupHelper.GetComputerIpAddress(server, port, true); 如果你对运行 Appium 服务器的计算机有一个硬编码的 IP 地址,你可以硬编码它。否则你需要一个 Helper 类(在这个例子中是 TestSetupHelper)。此示例启动到服务器的 Socket 连接并返回所有详细信息。这样您就不必担心 IP 地址的变化。您只需传递您配置运行 Appium 的主机名和端口,您就可以从该连接获取连接信息,并实际连接到 Appium Server 实例。

    public static string GetComputerIpAddress(string computerName, int port, bool remote)
        {
            var ip = "";
            using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
            {
                socket.Connect(computerName, port);
                //If remote it gets the connection destination IP, else it gets the connection initiator IP
                IPEndPoint endPoint = remote ? socket.RemoteEndPoint as IPEndPoint : socket.LocalEndPoint as IPEndPoint;
                ip = endPoint.Address.ToString();
            }
    
            return ip;
        }
    

    这不会让你完全到达那里,但它会让你接近工作环境。然后你就可以开始着手让测试真正运行了。

    我希望这会有所帮助。

    J.R.

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2011-05-16
      • 2018-11-09
      相关资源
      最近更新 更多