2017-01-12 9 views
0

2つの異なるノード上で自分のセレングリッドに2つのテストがあります。 MACを実行するノードの1つ、もう1つのWIN。テスト実行中にGridが "Platform"要件を満たさない

私はTestNGの中で指定したそれは時々Macが別のタイムクロムFFなります、ランダムにそれらを起動する、またはその両方のテスト (例えば私は勝つクロームにのみ、テストおよびMAC FFのみテストを起動したい。)

を実行しますwinがオフの場合は、両方のテストをmacで起動します。私はテストで

<parameter name="platform" value="WINDOWS" /> 

を指定すると

それは、Mac上でこのテストを起動し、その逆することができます。

これは私のTestNGのファイル(S)

<suite name="TestSuite" parallel="tests"> 


    <test name="win chrome test"> 
     <parameters> 
      <parameter name="platform" value="WINDOWS" /> 
      <parameter name="browser" value="chrome" /> 
      <parameter name="version" value="55.0" /> 
      <parameter name="url" value="https://google.com" /> 
     </parameters> 
     <classes> 
      <class name="com.ParallelTest.CreateRandomProfileTest"/> 
      <class name="com.ParallelTest.LogInTest"> 

      </class> 
     </classes> 
    </test> 


    <test name="mac firefox test"> 
     <parameters> 
      <parameter name="platform" value="MAC" /> 
      <parameter name="browser" value="firefox" /> 
      <parameter name="version" value="50.1.0" /> 
      <parameter name="url" value="https://google.com" /> 
     </parameters> 
     <classes> 
      <class name="com.ParallelTest.CreateRandomProfileTest"/> 
      <class name="com.ParallelTest.LogInTest"> 

      </class> 
     </classes> 
    </test> 



</suite> 

ここでは私のグリッドは、ファイルに設定されている:

package com.parallelSetUp; 


import org.openqa.selenium.Platform; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.testng.annotations.AfterClass; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.Parameters; 

import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.concurrent.TimeUnit; 

public class Framework{ 
    String browser; 
    protected WebDriver driver; 

    @Parameters({ "platform","browser","version", "url" }) 
    @BeforeClass(alwaysRun=true) 
    public void setup(String platform, String browser, String 
      version, String url) throws MalformedURLException 
    { 
     this.browser = browser; 
     driver = getDriverInstance(platform, browser, version, url); 

    } 

    public static WebDriver getDriverInstance(String platform, String browser, String version, String url) 
      throws MalformedURLException { 
     String nodeURL = "http://192.168.1.115:4444/wd/hub"; 
     WebDriver driver = null; 
     DesiredCapabilities caps = new DesiredCapabilities(); 

     // Platforms 
     if (platform.equalsIgnoreCase("WINDOWS")) { 
      caps.setPlatform(Platform.WINDOWS); 
     } 
     if (platform.equalsIgnoreCase("MAC")) { 
      caps.setPlatform(Platform.MAC); 
     } 
     if (platform.equalsIgnoreCase("ANDROID")) { 
      caps.setPlatform(Platform.ANDROID); 
     } 

     // Browsers 
     if (browser.equalsIgnoreCase("chrome")) { 
      caps = DesiredCapabilities.chrome(); 
      //System.setProperty("webdriver.chrome.driver", "/Users/antonfiliptsov/Desktop/Grid/Chrome/ChromeDriver/chromedriver"); 
     } 
     if (browser.equalsIgnoreCase("firefox")) { 

      caps = DesiredCapabilities.firefox(); 
      //System.setProperty("webdriver.gecko.driver","/Users/antonfiliptsov/Desktop/Grid/Firefox/geckodriver"); 
     } 
     if (browser.equalsIgnoreCase("safari")){ 
      caps = DesiredCapabilities.safari(); 
     } 

     // Version 
     caps.setVersion(version); 
     driver = new RemoteWebDriver(new URL(nodeURL), caps); 
     // Maximize the browser's window 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
     // Open the Application 
     driver.get(url); 
     return driver; 
    } 

    @AfterClass 
    public void afterClass() { 
     driver.quit(); 
    } 
} 

を、これは私のNode.json

{ 
    "capabilities": 
    [ 
    { 
     "browserName": "firefox", 
     "maxInstances": 5, 
     "version": "50.1.0", 
     "seleniumProtocol": "WebDriver" 
    }, 
    { 
     "browserName": "chrome", 
     "maxInstances": 5, 
     "version": "55.0", 
     "seleniumProtocol": "WebDriver" 
    }, 
    { 
     "browserName": "safari", 
     "maxInstances": 1, 
     "version": "10.0.2", 
     "seleniumProtocol": "WebDriver" 
    } 
    ], 
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 
    "maxSession": 5, 
    "port": 5555, 
    "register": true, 
    "registerCycle": 5000, 
    "hub": "http://192.168.1.115:4444", 
    "nodeStatusCheckTimeout": 5000, 
    "nodePolling": 5000, 
    "role": "node", 
    "unregisterIfStillDownAfter": 60000, 
    "downPollingLimit": 2, 
    "debug": false, 
    "servlets" : [], 
    "withoutServlets": [], 
    "custom": {} 
} 

答えて

0

まず第一です、ノードをすべて起動してハブと接続した後にノードが持つ機能を確認する必要があります。http://localhost:{port}/grid/consoleを参照してくださいハブ機械。ノードマッチングにおいて考慮される機能は、PLATFORMBROWSER_NAMEVERSIONBROWSER_VERSIONAPPLICATION_NAMEあります。

その後、あなたのグリッドノードがどのように一致しているかを確認することができます。十分でない場合は、DefaultCapabilityMatcherクラスを拡張して独自のマッチャーを追加することができます(数週間前に行いました。それは私が望む方法を振る舞う)。 This linkは、デフォルトのマッチャーを拡張することをお勧めします。

関連する問題