Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Appium-在两个物理设备上运行测试_Java_Node.js_Selenium_Appium - Fatal编程技术网

Java Appium-在两个物理设备上运行测试

Java Appium-在两个物理设备上运行测试,java,node.js,selenium,appium,Java,Node.js,Selenium,Appium,关于这个问题,我见过很多线索,但我似乎找不到一个好答案。他们都说要启动两台appium服务器,将设备同步到两个不同的端口,然后运行它。然而,这似乎对我不起作用。我是这样做的 打开两个node.js终端 使用folliwing命令启动两台appium服务器:node appium.js-p 4476-U和node appium.js-p 4475-U每个appium服务器一台 我看到Appium在两台服务器上都使用了0.0.0.0:(端口#)的REST http接口 从我的testng文件运行我的

关于这个问题,我见过很多线索,但我似乎找不到一个好答案。他们都说要启动两台appium服务器,将设备同步到两个不同的端口,然后运行它。然而,这似乎对我不起作用。我是这样做的

  • 打开两个node.js终端
  • 使用folliwing命令启动两台appium服务器:node appium.js-p 4476-U和node appium.js-p 4475-U每个appium服务器一台
  • 我看到Appium在两台服务器上都使用了0.0.0.0:(端口#)的REST http接口
  • 从我的testng文件运行我的测试

    
    


  • 是的,我已将相应的UDID放入deviceName参数中。我是通过intellij,运行Windows7来实现这一点的。谢谢你的帮助

    我正在使用Selenium Grid在多个设备上执行此操作。但是你也应该能够在没有SG的情况下做到这一点。可能在启动Appium节点时遗漏了一些参数。我使用以下方法:

    节点appium-p--udid-bp

    Selenium网格 Selenium网格的构建允许自动运行和处理多个Selenium会话。它可配置用于多个设备(与appium一起使用时),允许并行或标准测试,并允许您基于功能系统为每个设备创建节点

    集线器

    Selenium Grid hub是一个中央服务器,负责管理运行多个测试的能力

  • 运行以下命令以启动集线器:

    $java -jar path/to/selenium-server-standalone-X.X.X.jar -role hub -port 4444 
    
  • 节点

  • 安装appium(除非您已经安装)

  • 每个节点都需要一个JSON文件,该文件概述了该节点将用于的设备的功能:


  • 请记住,每个节点都需要为
    url
    port
    配置使用不同的端口。例如,4723

  • 创建一个节点

    $appium --nodeconfig /Path/To/Config.json -p 4723 -bp 5723 --chromedriver-port 6723
    
  • 每个节点需要三个唯一的端口(端口、引导端口、ChromeDriver端口),我发现使用
    -p
    指定的端口需要与配置中给定的端口相同

    测试

    我建议使用TestNG或JUnit之类的测试框架,这将允许您运行测试套件,并通过
    @BeforeClass
    方法等中的功能

    但本质上,您需要做的就是使用与JSON配置文件中为某个节点指定的功能相同的功能创建AndroidDriver,然后AndroidDriver实例将与该特定节点(Selenium网格处理此问题)以及与该节点关联的设备相关联。这真的很简单,一旦你知道你在做什么

    初始化AndroidDriver,如下所示:

    driver.set(new AndroidDriver(new URL(SELENIUM_HUB_URL),
                    capabilities)); 
    
    人们常犯的一个错误是将节点URL而不是集线器URL传递给AndroidDriver(
    http://0.0.0.0:4723/wd/hub
    而不是
    http://0.0.0.0:4444/wd/hub
    )这是非常常见的,因为它至少在最初可以工作,但在尝试使用任何特定于Selenium网格的功能时(例如多个设备)一切都会破裂

    祝你好运,我希望这会有所帮助


    Liam

    您是否在使用Selenium网格?appium服务器是否运行良好,并且您在运行测试时是否遇到问题?你能复制粘贴错误吗?@LiamFerris不,我没有使用网格,这可能是原因吗?我将添加一个关于如何使用网格来允许在多个服务器上进行测试的答案devices@LiamFerris那太好了,谢谢你!我看到很多帖子都在谈论引导端口,我觉得这可能就是解决方案。。什么是引导端口?我将如何定义它?我实际上还没有完全研究它的含义。只需放置一些不同于其他端口和使用的引导端口的端口。对我有用。非常感谢你花时间发布这篇文章。
    {
    "capabilities":
    [
    {
    "browserName": "Chrome",
    "deviceName": "deviceName",
    "device": "device",
    "udid":"XXXXXXXX",
    "version":"X.X.X",
    "maxInstances": 5,
    "platform":"ANDROID",
    "platformName": "Android"
    }
    ],
    "configuration":
    {
    "cleanUpCycle":2000,
    "timeout":10000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
    "url":"http://0.0.0.0:4723/wd/hub",
    "maxSession": 5,
    "port": 4723,
    "host": "0.0.0.0",
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4444,
    "hubHost": "localhost"
    }
    }
    
    $appium --nodeconfig /Path/To/Config.json -p 4723 -bp 5723 --chromedriver-port 6723
    
    driver.set(new AndroidDriver(new URL(SELENIUM_HUB_URL),
                    capabilities));