Webdriver网格在不同的浏览器上运行测试

时间:2013-12-03 17:03:58

标签: selenium-grid selenium-chromedriver

我正在尝试在不同的浏览器上(在同一节点中)分发我的测试我正在使用Selenium Grid。

这是我的代码:

@Parameters("browser")
@BeforeTest

public void setup (String browser) throws IOException  

{
    File file = new File("config.properties");
    FileInputStream fileInput = new FileInputStream(file);
    Properties properties = new Properties();
    properties.load(fileInput);
    fileInput.close();
    TestURL = properties.getProperty("AppURL");
    BaseURL = properties.getProperty("HubURL");
    winURL = properties.getProperty("WinURL");





        DesiredCapabilities capability=null;

        if(browser.equalsIgnoreCase("firefox")){
            System.out.println("firefox");
            capability= DesiredCapabilities.firefox();
            capability.setBrowserName("firefox"); 
            capability.setPlatform(Platform.WINDOWS);
            //capability.setVersion("");
        }

        if(browser.equalsIgnoreCase("chrome")){
            File chromedriver = new File("C:\\grid\\chromedriver_win32_2.3");
            System.setProperty("webdriver.chrome.driver", chromedriver.getAbsolutePath());
            System.out.println("chrome");
            capability= DesiredCapabilities.chrome();
            capability.setBrowserName("chrome"); 
            capability.setPlatform(Platform.WINDOWS);


            //capability.setVersion("");
        }


    driver = new RemoteWebDriver ( new URL ( winURL ),  capability) ;
    driver.get(TestURL);
      WebElement input1 = driver.findElement(By.id("login_form_user_input"));
      input1.sendKeys("guest");
      WebElement input2 = driver.findElement(By.id("login_form_password_input"));
      input2.sendKeys("guest");
      WebElement btn = driver.findElement(By.id("login_form_signin_button"));
      btn.click();






}

这是我的testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
       <suite name="Basic Web Elements" thread-count="2" parallel="tests" >
       <test name="Home Page load time on firefox">
    <parameter name="browser" value="firefox"/>
    <classes>
        <class name="basicWebElements.HomePage" />
    </classes>
</test>
<test name="Home Page load time on Internet Explorer">
    <parameter name="browser" value="chrome"/>
    <classes>
        <class name="basicWebElements.HomePage" />
    </classes>
</test>
 </suite> 

然而,当我运行testng XML时,我收到此错误: org.openqa.selenium.WebDriverException:驱动程序可执行文件的路径必须由webdriver.chrome.driver系统属性设置;有关更多信息,请参阅http://code.google.com/p/selenium/wiki/ChromeDriver。最新版本可以从http://code.google.com/p/chromedriver/downloads/list

下载

请注意,我的chromedriver保存在上面代码中提到的路径中的节点中,并且我的ENV变量PATH指向驱动程序exec文件。

我正在通过执行此批处理文件启动我的集线器:

set HERE=%CD%
set JAVA_HOME=%HERE%\jdk1.7.0_40
set PATH=%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;%PATH%
set SELENIUM_VERSION=2.35.0
set CHROME_VERSION=chromedriver_win32_2.3
set HUB_URL=http://localhost:4444/grid/register
start java -jar selenium-server-standalone-%SELENIUM_VERSION%.jar  -role hub 

以这种方式启动我的节点:

java -jar selenium-server-standalone-2.35.0.jar -role webdriver -hub   http://*.*.*.*:4444/grid/register  -port 5556

我不知道为什么我的测试在Firefox上正常运行但在Chrome中运行不正确。

2 个答案:

答案 0 :(得分:1)

您可以在启动节点时设置chromedriver路径,如下所示:

java -jar selenium-server-standalone-2.35.0.jar -role webdriver -hub   http://*.*.*.*:4444/grid/register  -port 5556 -Dwebdriver.chrome.driver=path_to_chromedriver_in_node

这将正确设置chromedriver路径。

在您的情况下,您是在节点中使用java代码还是在其他计算机上?你的java代码

File chromedriver = new File("C:\\grid\\chromedriver_win32_2.3");
System.setProperty("webdriver.chrome.driver", chromedriver.getAbsolutePath());

将在代码实际可用的机器中执行。我经常看到人们在Hub中保留这些代码并抱怨chromedriver没有在节点中设置。在你的情况下,这也许是理由。

答案 1 :(得分:0)

我认为问题是在你的路径中你没有附加“.exe”。你试过下面的代码修改

File chromedriver = new File("C:\\grid\\chromedriver_win32_2.3.exe");

FWIW我用来设置Chromedriver的代码是:

if (browserName.equalsIgnoreCase("Chrome")){
            String chromeProp= System.getProperty("user.dir")+"/lib/chromedriver.exe";
            System.setProperty("webdriver.chrome.driver",chromeProp);

            driver = new ChromeDriver();