当我尝试使用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());
}
}
}
答案 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 v2.21不支持Firefox 17.事实上,Firefox 17仅支持几天前发布的v2.27版本。
降级Firefox或更新Selenium。
可能是或可能不是造成此特定错误的原因,但您必须执行上述操作之一,即使有半个机会让它发挥作用。
答案 2 :(得分:0)
根据找到的答案here
它因为多个javaw.exe在后台运行。 要查看此Goto任务管理器并选择进程选项卡。 您可以看到将运行多个javaw.exe。 逐个选择进程javaw.exe,然后单击“结束进程”并再次尝试运行脚本。
答案 3 :(得分:-1)
我刚使用了chromeDriver,效果很好。