1

我正在用 PHPUnit 和 Selenium 做一些测试,我希望它们都在同一个浏览器窗口中运行。

我试过用

java -jar c:\php\selenium-server-standalone-2.33.0.jar -browserSessionReuse

但没有明显的变化。

我也尝试在设置中使用 shareSession()

public function setUp()
{
    $this->setHost('localhost');
    $this->setPort(4444);
    $this->setBrowser('firefox');
    $this->shareSession(true);
    $this->setBrowserUrl('http://localhost/project');
}

但唯一的变化是它为每个测试打开一个窗口,而不是真正共享会话。在这一点上我没有想法。

我的测试如下所示:

public function testHasLoginForm()
{
    $this->url('');

    $email = $this->byName('email');
    $password = $this->byName('password');

    $this->assertEquals('', $email->value());
    $this->assertEquals('', $password->value());
}
4

3 回答 3

3

这是优雅的解决方案。要在 中共享浏览器会话Selenium2TestCase,您必须sessionStrategy => 'shared'在初始浏览器设置中进行设置:

public static $browsers = array(
    array(
        '...
        'browserName' => 'iexplorer',
        'sessionStrategy' => 'shared',
        ...
    )
);

替代(默认)是'isolated'.

于 2013-10-02T02:23:29.110 回答
2

您不需要使用标志 -browserSessionReuse 在您的情况下,在每次测试和启动新实例之前运行的设置功能。这就是我为防止这种情况发生而采取的措施(它有点难看,但在 Windows 和 Ubuntu 中都适用于我):

  1. 我用 static ver: $first 创建了辅助类并对其进行了初始化。助手.php:

    <?php
    class helper
    {
        public static $first;
    }
    helper::$first = 0;
    ?>
    
  2. 编辑主测试文件 setUp() 函数(并将 require_once 添加到 helper.php):

    require_once "helper.php";
    
    class mySeleniumTest extends PHPUnit_Extensions_SeleniumTestCase
    {
    
            public function setUp()
            {
                    $this->setHost('localhost');
                    $this->setPort(4444);
                    if (helper::$first == 0 )
                    {
                            $this->shareSession(TRUE);
                            $this->setBrowser('firefox');
                            $this->setBrowserUrl('http://localhost/project');
                            helper::$first = 1 ;
                    }
            }
    ....
    

if 之外的 setHost 和 setPort 因为值在每次测试后重新启动(对我来说......)并且每次都需要设置(如果 selenium 服务器不是 localhost:4444)

于 2013-06-16T12:10:30.633 回答
0

刚刚找到了一种(更快)的方法:如果您在一个函数中执行多个测试,则所有测试都在同一个窗口中执行。挫折是测试和报告不会被测试很好地呈现,但速度却提高了!

在每个测试的相同功能中,只需使用:

$this->url('...');

或者

$this->back();
于 2014-04-19T12:09:00.830 回答