PHP-Behat/mink+;selenium2 webdriver意外启动新实例/会话
我正在尝试使用PHP-Behat/mink+;selenium2 webdriver意外启动新实例/会话,php,selenium,selenium-webdriver,behat,mink,Php,Selenium,Selenium Webdriver,Behat,Mink,我正在尝试使用behat/mink+selenium2帮助一位朋友自动化一些过程。它在工作,但是不知何故,在这个过程的中间, SeleIuM2 2/代码>从原始开始并行启动新的实例/会话。 有没有办法防止这种行为并只运行一个实例/会话 这是我的代码(laravel控制器类): 我在网格模式下运行selenium服务器,通过内部网络(LAN)连接集线器和节点。这是我用来启动selenium服务器的命令(我将jar文件重命名为selenium server.jar): 我使用的是Laravel5.1
behat/mink
+selenium2
帮助一位朋友自动化一些过程。它在工作,但是不知何故,在这个过程的中间,<代码> SeleIuM2 2/代码>从原始开始并行启动新的实例/会话。
有没有办法防止这种行为并只运行一个实例/会话
这是我的代码(laravel控制器类):
我在网格模式下运行selenium服务器,通过内部网络(LAN)连接集线器和节点。这是我用来启动selenium服务器的命令(我将jar文件重命名为selenium server.jar):
我使用的是Laravel5.1、behat/mink、behat/mink-selenium2-driver和SeleniumStandalone2.48.2
这就是我的问题所在,当第一个/原始会话运行时,selenium2意外地启动了新会话
如何告诉selenium2服务器一次只启动/运行一个会话
谢谢。您能发布一些代码,以便我们了解您的实现吗?@MalteseFalcon您好,我已经添加了代码和其他一些细节。谢谢你的回复。我在用Cucumber设计步骤时遇到过类似的问题,你有多少步骤定义类?如果有多个会话,您是否在这两个会话中都实例化了一个新会话。IDK用于behat,但Cuke演练所有步骤定义类并运行所有设置方法。希望它能帮助您发布一些代码,这样我们就可以了解您的实现了?@MalteseFalcon嗨,我已经添加了代码和其他一些细节。谢谢你的回复。我在用Cucumber设计步骤时遇到过类似的问题,你有多少步骤定义类?如果有多个会话,您是否在这两个会话中都实例化了一个新会话。IDK用于behat,但Cuke演练所有步骤定义类并运行所有设置方法。希望能有帮助
class testBehat extends Controller
{
protected $session;
public function __construct()
{
set_time_limit(300);
$driver = new Selenium2Driver('firefox');
$capabilities = $driver->getDefaultCapabilities();
$driver->setWebDriver(new WebDriver('http://10.99.0.11:5555/wd/hub'));
$this->session = new Session($driver);
}
public function run()
{
$admin = User::find(0);
$simulator = Simulator::find(0);
$this->session->start();
$this->login($admin->username, $admin->pass);
if ($this->isElementExist('id', 'profilemenu')) {
$this->session->visit('http://dar*******.com/simulator/new/');
}
$this->upload($simulator);
file_put_contents(public_path('screenshoot/' . $admin->user . '-' . $simulator->name . '-success.jpg'), $this->session->getScreenshot());
$this->session->stop();
return 'success';
}
private function login($user, $pass)
{
$this->session->visit('http://dar*******.com/signin');
$this->handlePages('id', 'username', 'text', $user);
$this->handlePages('id', 'password', 'text', $pass);
$this->handlePages('id', 'submit', 'click');
file_put_contents(public_path('screenshoot/' . $user . '-' . '-loggedin.jpg'), $this->session->getScreenshot());
}
private function isElementExist($selector, $locator)
{
if ($selector === 'css')
{
while (!$this->session->getPage()->has($selector, $locator)) {
sleep(1);
file_put_contents(public_path('public/element.jpg'), $this->session->getScreenshot());
}
$return = true;
}
elseif ($selector === 'id' || $selector === 'name')
{
if ($locator === 'tags') {
$selector = 'id_or_name';
}
while (!$this->session->getPage()->has('named', array($selector, $locator))) {
sleep(1);
file_put_contents(public_path('screenshoot/element.jpg'), $this->session->getScreenshot());
}
$return = true;
}
return $return;
}
public function handlePages($selector, $locator, $action, $data = null)
{
$element = $this->elementFinder($selector, $locator);
switch ($action) {
case 'text':
$element->setValue($data);
break;
case 'file':
$element->attachFile($data);
break;
case 'select':
$element->selectOption($data);
break;
case 'click':
$element->click();
break;
case 'load':
break;
case 'upload':
while ($element->getAttribute('style') !== 'width: 100%;') {
sleep(1);
}
break;
default:
echo 'Action not found.';
exit;
}
return $element;
}
public function elementFinder($selector, $locator)
{
if ($this->isElementExist($selector, $locator)) {
if ($selector === 'css') {
return $this->session->getPage()->find('css', $locator);
} else {
if ($locator === 'tags') {
$selector = 'id_or_name';
}
return $this->session->getPage()->find('named', array($selector, $locator));
}
} else {
echo 'Element not Found.';
}
return null;
}
private function upload($simulator)
{
$this->handlePages('id', 'fileupload', 'file', '~/simulator/'. $simulator->name);
sleep(4);
file_put_contents(public_path('screenshoot/' . $simulator->name . '-simulator-file.jpg'), $this->session->getScreenshot());
$this->handlePages('id', 'sim_name', 'text', $simulator->name);
file_put_contents(public_path('screenshoot/' . $simulator->name . '-name-field.jpg'), $this->session->getScreenshot());
$this->handlePages('id', 'sim_category', 'select', $simulator->category);
$this->handlePages('id', 'sim_remark', 'text', $simulator->remark));
$this->handlePages('id', 'save', 'click');
}
}
root@10.99.0.10:~/selenium2# java -jar selenium-server.jar -role hub -timeout 12000 -browserTimeout 12000
root@10.99.0.11:~/selenium2# java -jar selenium-server.jar -role node -host 10.99.0.11 -hub http://10.99.0.10:4444/grid/register/ -timeout 12000 -browserTimeout 12000