无法在45000 ms内绑定到锁定端口70 54

时间:2012-12-10 15:09:04

标签: maven selenium selenium-webdriver

当我尝试使用MVN测试命令行运行我的硒测试时,我收到此错误。奇怪的是,我在3天前尝试过它并成功运行:

------------------------------------------------------
T E S T S
-------------------------------------------------------
Running GoogleNavigationTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 45.672 sec <<< FAILURE!

Results :

   Failed tests:   testApp(GoogleNavigationTest): Unable to bind to locking port 70
   54 within 45000 ms

  Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

这是我的测试:

import java.util.List;

 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.firefox.FirefoxProfile;
 import org.testng.annotations.Test;

public class GoogleNavigationTest {
@Test
public void testApp(){
    // The Firefox driver supports javascript 
    FirefoxProfile firefoxProfile = new FirefoxProfile();
    WebDriver driver = new FirefoxDriver();

    // Go to the Google Suggest home page
    driver.get("http://www.google.com/webhp?complete=1&hl=en");

    // Enter the query string "Cheese"
    WebElement query = driver.findElement(By.name("q"));
    query.sendKeys("Cheese");

    // Sleep until the div we want is visible or 5 seconds is over
    long end = System.currentTimeMillis() + 5000;
    while (System.currentTimeMillis() < end) {
        WebElement resultsDiv = driver.findElement(By.className("gssb_e"));

        // If results have been returned, the results are displayed in a drop down.
        if (resultsDiv.isDisplayed()) {
          break;
        }
    }

    // And now list the suggestions
    List<WebElement> allSuggestions =   
    driver.findElements(By.xpath("//td[@class='gssb_a gbqfsf']"));

    for (WebElement suggestion : allSuggestions) {
        System.out.println(suggestion.getText());
    }
     }
   }

4 个答案:

答案 0 :(得分:4)

延迟回复,但请尝试此更新的代码。 Selenium Webdriver将实例绑定到特定的TCP端口。如果您的测试失败且驱动程序未正确关闭,则端口将保持x时间。使用driver.Quit()通常会释放TCP端口。

要测试当前仍可以保留哪个端口,可以使用netstat -a命令(窗口)查找活动连接列表。

解决此问题的一种方法是允许selenium绑定到您的代码生成的另一个端口。 7000到7100以上的大多数端口都可以使用。 Selenium内置处理端口的方法是最初尝试绑定到7055,如果失败,绑定到7054,如果失败绑定到7056.在MOST测试用例中这很好,但我发现多个测试仍然遇到失败。因此,不要使用默认值,而是为配置文件指定自己的默认值。

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.annotations.Test;

public class GoogleNavigationTest {
@Test
public void testApp(){

    // Specify a new or randomly generated port for the driver to use
    int genPort = 7052;
    // The Firefox driver supports javascript 
    FirefoxProfile firefoxProfile = new FirefoxProfile();
    //In the profile, assign it a different port to use instead of 7054,7055,7056
    //In my tests, I have a method that will generate a port to use that is open
    firefoxProfile.Port = genPort; 
    WebDriver driver = new FirefoxDriver(firefoxProfile);

编辑:深入研究这个问题已经发现有两件事导致了这个错误。第一个是本地计算机上的TCP / UDP端口选择,第二个是selenium必须将基本firefox配置文件从驱动器复制到其临时文件夹的时间。传输速度越慢,出现端口绑定问题的可能性就越大。

要解决此问题,请尽量缩小您的个人资料。这可能涉及删除启动时生成的一些基本firefox文件。我的firefox个人资料是&gt; 5 MB大小。在我做这项研究之前,我的个人资料大小超过60 MB。在每次测试开始时,它会尝试将60MB传输到临时位置并绑定到锁定端口。

我的新代码没有让我失望

    var smallerProfile = @"C:\Firefox Profiles\SmallProfile";
    var genPort = new Random(); 

     FirefoxProfile profile = new FirefoxProfile(smallerProfile);
     profile.Clean();
     profile.Port = genPort.Next(7000, 7500);

我在每个主要运行开始时复制较小的配置文件。

答案 1 :(得分:1)

Selenium v​​2.21不支持Firefox 17.事实上,Firefox 17仅支持几天前发布的v2.27版本。

降级Firefox或更新Selenium。

可能是或可能不是造成此特定错误的原因,但您必须执行上述操作之一,即使有半个机会让它发挥作用。

答案 2 :(得分:0)

根据找到的答案here

它因为多个javaw.exe在后台运行。 要查看此Goto任务管理器并选择进程选项卡。 您可以看到将运行多个javaw.exe。 逐个选择进程javaw.exe,然后单击“结束进程”并再次尝试运行脚本。

答案 3 :(得分:-1)

我刚使用了chromeDriver,效果很好。