0

我正在使用网格测试 selenium 远程 webdriver,但遇到了一个错误:

org.openqa.selenium.WebDriverException: Unable to bind to locking port 7054 within 45000 ms
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37'
System info: host: 'XXXXX', ip: 'XXXXX', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_45'
Driver info: driver.version: FirefoxDriver
Command duration or timeout: 47.71 seconds
Build info: version: '2.44.0', revision: '76d78cf', time: '2014-10-23 20:02:37'
System info: host: 'XXXXX', ip: 'XXXXX', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_45'
Driver info: org.openqa.selenium.remote.RemoteWebDriver

关于我的配置的信息:

  • selenium-server-standalone-2.45.0
  • 浏览器:Firefox esr 31.5.0
  • 我用 ecipe 和 testNG 运行测试
  • 集线器配置: { "host": null, "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "prioritizer": null, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "throwOnCapabilityNotPresent": true, "nodePolling": 5000, "cleanUpCycle": 5000, "timeout": 300000, "browserTimeout": 0, "maxSession": 100, "jettyMaxThreads":-1 }

  • 我有三个配置如下的节点:

    { "capabilities": [ { "browserName": "firefox", "maxInstances": 5, "seleniumProtocol": "WebDriver" }, { "browserName": "chrome", "maxInstances": 5, "seleniumProtocol": "WebDriver" }, { "browserName": "iexplorer", "maxInstances": 1, "seleniumProtocol": "WebDriver" } ], "configuration": { "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 10, "port": 5555, "host": ip, "register": true, "registerCycle": 5000, "hubPort": 4444, "hubHost": ip } }

我的问题是:这个错误的原因可能是什么?目前我什至不明白为什么即使我的集线器和节点配置端口不同,为什么还要锁定端口 7054。

感谢您的时间和答案。

更新:

@BeforeMethod 和 @AfterMethod 函数

@BeforeMethod
public void setUp(){

    StringBuilder text = customAppender.createInstance();
    customAppender.setBuilder(text);    

    WebDriver driver = LocalDriverFactory.createInstance("firefox");
    LocalDriverManager.setWebDriver(driver);
    customAppender.append("Opened webDriver instance = " + driver.hashCode());
}

@AfterMethod
public void shutDown(){
    WebDriver driver = LocalDriverManager.getDriver();
    if (driver != null) {
        mainFunctions.log("Closed webDriver instance = " + driver.hashCode(), 2);
        driver.quit();
    }
}

@Test 方法:

@Test(dataProvider = "getData")
public static void test(String browserName, String link) throws MalformedURLException, InterruptedException {
        WebDriver driver = LocalDriverManager.getDriver();
        customAppender.append("Thread id = " + Thread.currentThread().getId());
        customAppender.append("Hashcode of webDriver instance = " + driver.hashCode());
        driver.get(link);
        customAppender.append(driver.getTitle());
        Thread.sleep(20000); // for testing purposes
        customAppender.append("Test 1, time: " + new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime()));
        mainFunctions.log(customAppender.printOutString(), 0);
    }

@Test(dataProvider = "getData")
public static void test2(String browserName, String link) throws MalformedURLException, InterruptedException {
        WebDriver driver = LocalDriverManager.getDriver();
        customAppender.append("Thread id = " + Thread.currentThread().getId());
        customAppender.append("Hashcode of webDriver instance = " + driver.hashCode());
        driver.get(link);
        customAppender.append(driver.getTitle());
        Thread.sleep(20000); // for testing purposes
        customAppender.append("Test 2, time: " + new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime()));
        mainFunctions.log(customAppender.printOutString(), 0);
    }

@DataProvider

@DataProvider(parallel=true)
    public Object[][] getData(){
        Object[][] d = new Object[4][2];
        // dummy data

        d[0][0] = "firefox";
        d[0][1] = "http://www.google.com";

        d[1][0] = "firefox";
        d[1][1] = "http://www.google.com";

        d[2][0] = "firefox";
        d[2][1] = "http://www.google.com";

        d[3][0] = "firefox";
        d[3][1] = http://www.google.com";

        return d;
    }

testNG.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods" thread-count="20"> 
    <test name="Test">
        <classes>
            <class name="ts.testWebdriver" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->
4

2 回答 2

1

原因可能是您通过 webdriver 的 firefox 实例正在远程机器上的特定端口上运行。杀死 ff 实例并执行测试。请在测试用例结束时提供 driver.quit() 以避免这些失败。

于 2014-11-24T14:59:16.673 回答
0

好的,所以我在 WebDriver 上遇到了这个问题,但无法解决。虽然找到了解决方法。我创建了一个新的 Windows 用户,并从该用户运行了测试。现在看来还可以。祝你好运。

于 2015-01-16T14:09:18.653 回答