2016-08-22 82 views
-3

我想通过注册运行Selenium Grid来自VirtualBox的节点。每当我尝试执行testng.xml并行运行测试,我得到以下错误:失败的配置:@BeforeTest beforeTest如何解决这个问题。
我确定所有必需的jar文件都被添加了。 Selenium集线器正在运行,节点也被注册到集线器。@BeforeTest beforeTest(“WIN8”,“firefox”,“http://10.xxx:4467/wd/hub”)java.net.MalformedURLException:无协议:remoteurl

package com.example.selenium; 

    import org.testng.annotations.Test; 

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

    import org.openqa.selenium.By; 
    import org.openqa.selenium.Platform; 
    import org.openqa.selenium.remote.DesiredCapabilities; 
    import org.openqa.selenium.remote.RemoteWebDriver; 
    import org.testng.annotations.BeforeTest; 
    import org.testng.annotations.Parameters; 

    public class ParllelTest { 
//RemoteWebDriverInstance 
     static RemoteWebDriver driver; 
    //Checking the type of browser and platform registered 

     @BeforeTest (alwaysRun=true) 
     @Parameters({"platform","browserName","remoteurl"}) 
     public void beforeTest(String platform,String browserName,String remoteurl) throws MalformedURLException { 

     DesiredCapabilities cap = null; 


      if(browserName.equals("firefox")) { 

       cap=new DesiredCapabilities().firefox(); 
      cap.setPlatform(Platform.VISTA); 
      cap.setBrowserName("firefox"); 
      } 

      else if(browserName.equals("chrome")) 
      { 
       cap=new DesiredCapabilities().chrome(); 
       cap.setBrowserName("chrome"); 
       cap.setPlatform(Platform.LINUX); 
      } 


      driver=new RemoteWebDriver(new URL("remoteurl"),cap); 
     } 
//navigating to particular page 
     @Test 
     public void googlesearch() 
     { 


      driver.get("http://www.gmail.com"); 
      driver.findElement(By.name("username")).sendKeys("xxxxx"); 
      driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
      driver.findElement(By.name("password")).sendKeys("xxxxx"); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      driver.findElement(By.id("click")).click(); 
     } 
    } 

Iam粘贴相应的xml文件,从iam试图并行运行测试。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="TestSuite" thread-count="4" parallel="tests" > 
<test verbose="3" name="Vista"> 
<paramaters> 
    <parameter name="platform" value="VISTA"/> 
    <parameter name="browserName" value="firefox"/> 
    <parameter name="remoteurl" value="http://10.x.x.x:5557/wd/hub"/> 
</paramaters> 
<classes> 
    <class name="com.example.selenium.ParllelTest"> 
    <method> 
     <include name="googlesearch"/> 
     </method> 
    </class> 
</classes> 
</test> 
<test verbose="3" name="ubuntu"> 
<paramaters> 
    <parameter name="platform" value="WIN8"/> 
    <parameter name="browserName" value="firefox"/> 
    <parameter name="remoteurl" value="http://10.x.x.x:4467/wd/hub"/> 
</paramaters> 
<classes> 
    <class name="com.example.selenium.ParllelTest"> 
     <method> 
     <include name="googlesearch"/> 
     </method> 
    </class> 
</classes> 
</test> 

</suite> 
+0

你在用@BeforeTest注释的方法中有什么? –

+0

Iam粘贴在我的问题代码 –

+0

请不要downvaote IAM绝对初学者硒。Iam真的卡住在这里很长一段时间需要帮助。 –

回答

0

java.net.MalformedURLException: no protocol: remoteurl

driver=new RemoteWebDriver(new URL("remoteurl"),cap); 

纵观例外,这条线,看起来像你的参数remoteurl不获取解码,它的价值,即http://10.x.x.x:4467/wd/hub。而是越来越通过作为“remoteurl”字符串,显然不能被解析成url。

只是为了证实这一点,尽量把remoteurl的值在上面的代码行:

driver=new RemoteWebDriver(new URL("http://10.x.x.x:4467/wd/hub"), cap) 

它肯定会工作的话,那就是为什么remoteurl被作为字符串而不是通过一个问题变量,如果上述线路正常,然后再尝试通过remoteurl不带引号如下:

driver=new RemoteWebDriver(new URL(remoteurl), cap) 

虽然我不是100%地肯定了remoteurl或“remoteurl”但让我们尝试。对于第一点,我100%确定新的URL正在接收“remoteurl”而不是“http://10.x.x.x:4467/wd/hub”。

+0

谢谢。但使用“http://10.xxx:4467/wd/hub”可以在单机上执行,但我想在两台机器上并行执行测试:“http://10.xxx:4467/wd/hub“和”http://10.xxx:5557/wd/hub“ –

相关问题