首页 文章

如何为Android自动化设置Appium环境?

提问于
浏览
15

我在测试中作为SD工作 . 我是Appium Automation工具的新手,这个工具非常难为我设置环境 .

我推荐以下链接:: http://unmesh.me/category/appium/

这个链接帮助我通过命令行安装Node.js和appium . 但我不确定这是正确的方法 .

我从命令行得到以下消息:

mani-kandans-MacBook-Pro:platform-tools manikandan $ info:欢迎来到Appium v0.8.2(REV e9cc66197ad6a3496322bd77a8699509fc761b69)info:Appium REST http接口监听器在0.0.0.0:4723信息上启动 - socket.io已启动

在此之后我不知道 . 如何编写测试用例并通过Appium运行?

如果您有兴趣分享您对Appium工具的了解 . 请指导我 .

  • 如何安装Appium?

  • 如何通过Appium工具运行testcase?

3 回答

  • 15

    第一部分:- . 您似乎已使用节点server.js启动了appium服务器 - 您可以通过在浏览器中转到 localhost:4723/wd/hub/status 来检查服务器,这将返回服务器的一些详细信息 . 你已经这样做了 .

    命令输出将如下所示,确认服务器已启动:

    info: Welcome to Appium v0.8.1 (REV ***********************************)
    info: Appium REST http interface listener started on 0.0.0.0:4723
           info  - socket.io started
    

    第二部分:- . 接下来,您将使用selenium RC for Python,Java或c#或您的语言选择 . 我使用了c#并且可以提供示例,这应该与您的测试类似 .

    要将selenium添加到c#类: using OpenQA.Selenium.Remote; 将所有数据传递给selenium所需的功能对象 . 存在一些自定义所需功能,例如:

    • 'app-package'这是应用包名称,例如com.myapp.main,

    • 'app-activity'这是要调用的应用程序主要活动,它也将启动该应用程序 . 这通常是一个泼水活动或主要活动,

    • 'wait-activity'是Appium一旦启动就会检查的活动,这将是应用程序活动,但对我而言,如果对于某些测试启动了一个新活动而不是被调用,它是不同的,

    • 'version'以Android版为例,

    • '设备ID'将您连接的设备或AVD带到命令和应用程序,该命令和应用程序将具有您要安装的apk的本地路径 . 如果已经存在已撤销的应用程序,则会在启动时对其进行签名和安装,它将为您跳过此选项 .

    DesiredCapabilities caps = new DesiredCapabilities();
        caps.SetCapability("app-package", "com.myapp.test");
        caps.SetCapability("browserName", "");
        caps.SetCapability("device", "Android");
        caps.SetCapability("app-activity", "com.myapp.SplashActivity");
        caps.SetCapability("takesScreenshot", true);
        caps.SetCapability("version", "4.1.2");
        caps.SetCapability("device ID", "uniquedeviceid");
        caps.SetCapability("app", @"C:\path to\app\on\pc\app.apk");
    

    在您创建的功能之后,创建一个远程Web驱动程序对象,传递您已使用的中心URL,例如 http://localhost:4723/wd/hub 以及您创建的所需功能 .

    RemoteWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4723/wd/hub/"), caps);
    

    此行使用Appium服务器的ip或主机开始侦听请求 . 对我来说,这个步骤标志安装并启动附加设备上的应用程序,希望这对你也一样 . 这是您编写的selenium测试连接到Appium服务器的地方 .

    现在使用创建的 driver 对象,您可以访问selenium rc命令,其中Appium已经为Android测试实现了许多替代方案 . 在每个期间,您的Appium服务器控制台窗口应显示是否存在任何问题 .

    输出将采用颜色编码,以帮助识别此窗口中的故障,但您可以按照自己的方式处理,并在需要时输出到文件 .

    Update for multiple devices 我不确定使用多个设备,我会考虑selenium grid我之前尝试将两台设备添加到一台机器上,并且测试有一些混淆,即adb无法区分,无论设备ID是否与配置和命令相加 . Appium团队一直在改进为服务器添加网格功能,我建议你看看Appium Grid(链接更新)

    我为缺乏网格经验而道歉,以便进一步帮助您 .

    问候,Brian

  • 1

    这似乎是迟到的回复,但我仍然认为这篇文章可以帮助一些人,他们正在寻找一步一步的指导,在Windows平台上安装Appium

    http://qaautomationworld.blogspot.in/2014/12/appium-setup-for-android-windows.html

    此链接主要涉及以下部分

    • JDK安装

    • Android SDK安装路径设置

    • Appium安装

    a)使用node.js

    b)使用Appium.exe

  • 3

    这是我的appium android的env.rb文件 .

    require 'rubygems'
    require 'appium_lib'
    
    # Start Android driver
    apk = {
        device: :android,
        app_path: (true && ENV['apk']) || 'path to apk',
        app_package: (true && ENV['package']) || 'com.foo.cam',
        app_activity: (true && ENV['activity']) || '.SplashActivity',
        app_wait_activity: (true && ENV['activity']) || '.MainActivity',
    }
    Appium::Driver.new(apk).start_driver
    
    Appium.promote_appium_methods Object
    
    log = Logger.new(STDOUT)
    
    case ENV['log']
      when 'WARN'
        log.level = Logger::WARN
      when 'DEBUG'
        log.level = Logger::DEBUG
      when 'INFO'
        log.level = Logger::INFO
      when 'ERROR'
        log.level = Logger::ERROR
      when 'FATAL'
        log.level = Logger::FATAL
      when 'UNKNOWN'
        log.level = Logger::UNKNOWN
      else
        log.level = Logger::DEBUG
    end
    
    log.debug('starting suite')
    
    Before do
      @test_env = {
          device: driver,
          main_activity: (true && ENV['main_activity']) || 'grid.GridLoginActivity',
          logger: log
      }
    end
    
    # Optional--clears alerts 
    After ('@rate_limit') do |scenario|
      log = @test_env[:logger]
      device = @test_env[:device]
    
      if scenario.failed?
        begin
          wait = Selenium::WebDriver::Wait.new :timeout => 1
          wait.until { device.alert_accept }
          log.debug('cleared rate limit dialog')
        rescue
          log.error("dialog didn't pop.")
        end
      end
    
      log.debug('rate_limit finished')
    end
    
    After ('@network_connection') do |scenario|
      log = @test_env[:logger]
      device = @test_env[:device]
    
      if scenario.failed?
        begin
          wait = Selenium::WebDriver::Wait.new :timeout => 1
          wait.until { device.alert_accept }
          log.debug('cleared network connection issue')
        rescue
          log.error("dialog didn't pop.")
        end
      end
    
      log.debug('network_connection finished')
    end
    

相关问题