2011-07-29 40 views
6

我在Windows 7(我也尝试使用Windows Server 2008)上设置了Selenium Grid 2(selenium-server-standalone-2.1.0)两个64位。我在本地测试WebDriver,一切正常。在Windows上设置Selenium Grid 2

我启动集线器:

Java的罐子硒的服务器独立-2.1.0.jar -role枢纽

添加一个节点的webdriver为Firefox工作,但别的如谷歌浏览抛出一个非法操作异常。

例如:

我尝试添加Chrome专用的节点:

Java的罐子硒的服务器独立-2.1.0.jar -role webdriver的-hub http://127.0.0.1:4444 -browser browserName =铬平台= windows版本= 12 -port 5556

这显示了在轮毂上的一个节点,当你去http://localhost:4444/grid/console

我添加代码来调用的webdriver如:

  DesiredCapabilities capability = new DesiredCapabilities(); 
      capability.SetCapability(CapabilityType.Platform, "windows"); 
      capability.SetCapability(CapabilityType.Version, "12"); 
      capability.SetCapability(CapabilityType.BrowserName, "chrome"); 

      IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"), capability); 

我几乎立刻得到一个异常:

{ “找不到:{平台=窗口,browserName =铬,版本= 12}”

看来,如果该节点是不是甚至被发现。我是新来的,这是我在设置中错过的东西吗? (互联网浏览器不变,改变版本似乎没有帮助)。

我已经搜索了几个小时,但没有任何匹配异常看起来像我的问题一般。

+0

请在网格看到它时包含配置输出。您可以通过单击Web控制台中的“查看配置”链接来获取此信息。以下链接也应该有数据:http://127.0.0.1:4444/grid/console?config=true&configDebug=true – nirvdrum

+1

谢谢,我已经想通了。我可以在配置中看到行throwOnCapabilityNotPresent:true capabilityMatcher:org.openqa.grid.internal.utils.DefaultCapabilityMatcher,由于没有匹配的功能,所以会抛出错误。欢呼,指引我在正确的方向。 – idsweb

回答

2

的IllegalOperation异常{“不能找到:{平台=窗口,browserName ...是那里是没有匹配的能力造成的(它从来就得到一个节点)

如果我使用一个配置文件。当我启动的是明确规定的平台和浏览器,如节点:

{ 
"capabilities": 
     [ 
       { 
         "browserName":"firefox", 
         "maxInstances":1 
       }, 
       { 
         "browserName":"chrome", 
      "platform":"WINDOWS", 
         "maxInstances":1 
       }, 
       { 
         "browserName":"internet explorer", 
         "version":"9", 
         "platform":"WINDOWS", 
         "maxInstances":1 
       } 
     ], 
"configuration": 
     { 
       "cleanUpCycle":2000, 
       "timeout":30000, 
       "proxy":"org.openqa.grid.selenium.proxy.WebDriverRemoteProxy", 
       "maxSession":5, 
       "url":"http://[myIP]/wd/hub", 

     } 
} 

,并与该行推出的中心:
Java的罐子硒的服务器独立-2.2.0.jar -role的webdriver - nodeConfig myconfig.json -hub http:// [myIP]:4444/grid/register

,创造像这样的功能:

DesiredCapabilities capability = new DesiredCapabilities(); 
capability.SetCapability(CapabilityType.Platform, "WINDOWS"); 
capability.SetCapability(CapabilityType.BrowserName, "internet explorer"); 

然后测试工作(你必须设置所有区域在IE的方式来保护)。
N.B.我确实注意到windows是大写的,就像在WINDOWS中一样,否则你会得到一个错误。

+0

你可以举个例子。使用命令运行集线器时出现错误 – senzacionale

0

尽力降低对Chrome版本和操作系统的条件:

您的代码注册节点将是以下

java -jar selenium-server-standalone-2.1.0.jar -role webDriver -hub http://127.0.0.1:4444 -browser browserName=chrome -port 5556 

并创建你的浏览器:

DesiredCapabilities capability = new DesiredCapabilities(); 
capability.SetCapability(CapabilityType.BrowserName, "chrome"); 

DesiredCapabilities capability = DesiredCapabilities.chrome(); 

这可能是因为您的Chrome未经您的注意而更新,或者版本号“12”不完全适合您的安装版本。 如果它在这些条件下运行,请尝试用新组合添加“Platform = WINDOWS”和“Version”CapabilityTypes。

+0

这只会掩盖他做错了什么。你错过了为什么他的实例化节点的命令不正确,你的命令也不起作用的主要原因。 –

2

文档确实记录了这一点,但方式不明确。

java -jar selenium-server-standalone-2.1.0.jar -role webDriver -hub http://127.0.0.1:4444 -browser browserName=chrome platform=windows version=12 -port 5556 

需要是:

java -Dwebdriver.chrome.driver="C:\Users\Mike\Documents\Java Libraries\Selenium\chromedriver\chromedriver.exe" -jar selenium-server-standalone-2.1.0.jar -role webDriver -hub http://127.0.0.1:4444/grid/register -browser "browserName=chrome,platform=WINDOWS,version=12" -port 5556 

你缺少从轮毂URL grid/register。最重要的是,如果您将多个参数传递给-browser,它们需要用引号引起来,并且用逗号分隔,而不用空格。您还需要以类似的方式传递webdriver.chrome.driver属性,方法与我做过的相同。

您可以检查它已经成功将您的浏览器和击球注册:

http://localhost:4444/grid/console 

而作为一个阿里纳斯,这是另一种方式,你可以声明所需的功能:

DesiredCapabilities dc = DesiredCapabilities.chrome(); 
dc.setVersion("12"); 
dc.setPlatform(Platform.WINDOWS); 
+0

可以将路径映射到Chrome.exe,还是必须是ChromeDriver? – DevDave

+1

@Tyler:它一定是'ChromeDriver' –

0

您可以设置

driver.quit(); 

在脚本的末尾

0
Lets consider Hub running on Machine-A whose IPAddress is = 192.168.10.10 default port no. 4444. 
Lets Node running on Machine-B whose IPAddress is = 192.168.10.20. 
Lets consider operating System on HUB and Node is installed on drive C:\ (C-Drive). 
create a folder named selenium on c:\ as c:\selenium. 
keep binaries of IExplorer.exe, chromeDriver.exe and Selenium-Standalone-server2.10.0.jar. (on both machine A and B). 

configuring HUB on Machine-A 
1- open Command prompt 
2- go to folder selenium using 
     i type cd\ then enter 
     ii type c: then enter 
     iii c:> cd selenium then enter 
3- java -jar selenium-server-standalone-2.20.0.jar -role hub 

Configuring NOde on Machine - B 
1- open Command prompt 
2- go to folder selenium using 
     i type cd\ then enter 
     ii type c: then enter 
     iii c:> cd selenium then enter 
3- java -jar selenium-server-standalone-2.20.0.jar -role node -hub http://192.168.10.10:4444/grid/register -port 5560 -browser browserName=chrome,maxInstance=4,platform=WIN8_1 -Dwebdriver.ie.driver=c:\selenium\ChromeDriver.exe 

your node will get register with Hub on port 5560. 

Test Case will become as- 

package testCase; 

import static org.junit.Assert.*; 

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

import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 

public class Avinash_Google_Chrome 
{ 

    WebDriver driver; 
    String baseUrl , nodeUrl; 

    @Before 
    public void setUp() throws Exception 
    { 
     nodeUrl = "http://192.168.10.20:5560/wd/hub"; //Machine-A IPAdress 
                with Port No.   

     DesiredCapabilities capability = DesiredCapabilities.chrome(); 

     driver = new RemoteWebDriver(new URL(nodeUrl),capability); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(2, TimeUnit.MINUTES); 
    } 

    @After 
    public void tearDown() throws Exception 
    { 
     driver.quit(); 
    } 

    @Test 
    public void test() throws InterruptedException 
    { 

     driver.get("https://www.google.co.in");  
     Thread.sleep(3000);  
     driver.findElement(By.linkText("Gmail")).click(); 
     Thread.sleep(3000); 
     driver.findElement(By.id("Email")).sendKeys("[email protected]"); 

     driver.findElement(By.id("Passwd")).sendKeys("********"); 

     driver.findElement(By.id("signIn")).click(); 

     Thread.sleep(6000); 
    } 

}