我正在尝试在不同的浏览器上(在同一节点中)分发我的测试我正在使用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中运行不正确。
答案 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();