尝试使用Headless Firefox运行Selenium时“连接被拒绝”

我使用的每个项目的版本如下:Selenium 3.4.0,GeckoDriver v0.19.0 for Linux 64和Firefox 52.4.0 .

我在这个网站上问过的第一个问题 . 我通常能够通过简单的潜伏来解决问题,但是这个问题一直给我一个真正的运行我的钱 .

我正在尝试将Jenkins设置为“mvn clean test”一个项目,该项目将在“test”上运行Selenium(使用版本3.4.0)测试 . 本质上,该项目是使用Selenium与另一个项目交互的类的集合 . 我已将JUnit测试附加到此项目,以便通过构建它,我可以使用我创建的测试套件 .

我可以使用Chrome或Firefox在我的本地计算机上执行此操作,但我希望Jenkins每晚自动执行此操作 . 我在Centos 7服务器上安装了Jenkins,我试图让这个项目与无头浏览器一起工作 . 我与PhantomJS有一些不同的问题(幻影中的DOM是空白的),所以我也尝试使用无头Firefox(使用版本52.4.0) . 以下是我采取的一般步骤:

  • 在CentOS上安装Xvfb .

  • 在CentOS上安装Firefox(52.4.0) .

  • 运行"Xvfb :99 -ac &"

  • 运行"export DISPLAY=:99"

  • 使用"mvn clean test"运行项目 .

(我有,我会在Jenkins上尝试第3-5步,但我只是坚持让它单独使用CentOS . )

该项目开始没有:

T E S T S. . . . . . 运行com . ***** . ***** . workflows.HappyPathTest . . . . . . 1510266036943 Marionette INFO在2828端口收听

然后它会在此之前停留片刻,然后发生以下情况:

org.openqa.selenium.WebDriverException:连接被拒绝构建信息:版本:'3.4.0',修订版:'未知',时间:'未知'系统信息:主机:'localhost.localdomain',ip:'0:0 :0:0:0:0:0:1',os.name:'Linux',os.arch:'amd64',os.version:'3.10.0-327.36.3.el7.x8 6_64',java .version:'1.8.0_111'驱动程序信息:driver.version:FirefoxDriver远程堆栈跟踪:堆栈回溯:0:0x4f388c - backtrace :: backtrace :: trace:

等等 .

发生错误的行很简单:“methodDriver = new FirefoxDriver();”

我最初认为“拒绝连接”意味着防火墙以某种方式阻止它,但是,当然,一切都在同一台服务器上,而“firewalld”进程并没有按原样运行 .

任何帮助将不胜感激 .

编辑:建议的线程涉及一个明显相似的问题,但那里的建议与我在这里解决问题的方法不同 . 但是,我确实通过更新我的Firefox版本来解决这个问题 .

回答(2)

2 years ago

请检查磁盘是否已满核心转储文件 . 它可能位于您的工作目录或用户目录中 . 在我的环境中,我们只获得了前20个测试,因为我们的用户目录只有少于1G的可用空间 .

2 years ago

好吧,我似乎能够解决这个具体问题 .

我只是将firefox更新为56.0.1 . 当我最初安装firefox时,看起来Centos没有默认为最新版本 .

我记得读过一些东西,“GeckoDriver的每个版本都是专门为特定版本的Firefox定制的” . 所以,每次你获得一个新的GeckoDriver可能需要一个新的firefox .

这为一个全新的问题打开了大门 . 我到达这一行:

wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.className( “resultText”)));

这与头部浏览器一起工作正常,我得到以下回复:

“org.openqa.selenium.TimeoutException:预期条件失败:等待By.className定位的任何元素的存在:resultText(尝试20秒,间隔为250 MILLISECONDS)”

这看起来与我在PhantomJS中遇到的问题类似 . 这就好像无头浏览器访问的网站完全不同于头部浏览器 .