可以为任何Selenium Grid手机设备提供Appium,而无需指定" udid"或" deviceName"作为DesiredCapability?

时间:2016-02-22 23:05:25

标签: appium selenium-grid

我希望将多个硬件智能手机连接到Selenium Grid,如 Appium节点(一个appium服务器/设备)。我也想只指定 Selenium Grid Hub作为Appium测试的目标。

如果我这样做,Appium似乎要求我指定一个" deviceName"或" udid"作为DesiredCapability。指定其中任何一个意味着我的测试仅针对硬编码到测试中的单个特定设备,而不是针对任何符合" platform"的设备。

如何将Appium与Selenium Grid一起使用,只选择符合DesiredCapabilities的任何设备,而不是使用(看似必需的)" udid"或" deviceName"?

作为一个用例,我有(1)iOS硬件设备和(1)Android硬件设备。我希望我的AppiumDriver实例化只具有指定Android或IOS的Desired Capability,并且只返回满足这些功能的任何设备。

2 个答案:

答案 0 :(得分:0)

$str = '/technic/k-700/?type=repair';
$first = explode('/', explode('?', $str)[0]);
$second = explode('=', explode('?', $str)[1]);
$first[1] = $second[1];
echo $new = implode("/",$first);

//output: /repair/k-700/

**并保持测试类如:**

You can try running tests from testNG.xml and keep all the deviceName in testNG.xml, I've kept a if-else block for the apk path as I had two different machines.


<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Automation" parallel="tests">

        <test name="Test1">
        <parameter name="deviceName" value="XYZZZZZ" />
            <classes>
                <class name="poc.grid.GridTest" />
            </classes>
        </test>

        <test name="Test2">
        <parameter name="deviceName" value="ZYXXXXX" />
            <classes>
                <class name="poc.grid.GridTest" />
            </classes>
        </test>

    </suite>

答案 1 :(得分:0)

我也遇到了udid功能问题。对我来说(作为一个初学者),它不够清楚你可以发送哪个匹配的功能以及你可以发送哪个功能来覆盖设置。我知道defaultcapabilitymatcher只匹配一些: https://github.com/SeleniumHQ/selenium/blob/master/java/server/src/org/openqa/grid/internal/utils/DefaultCapabilityMatcher.java

但是我需要将udid添加到会话创建中,以使其在我的设置中适用于我。所以也许我的发现对你也有用。 How to make sure the appium node is connected to only one phone?