Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何运行PHPUnit Selenium测试而不为每个函数运行新的浏览器窗口?_Php_Unit Testing_Selenium_Phpunit - Fatal编程技术网

如何运行PHPUnit Selenium测试而不为每个函数运行新的浏览器窗口?

如何运行PHPUnit Selenium测试而不为每个函数运行新的浏览器窗口?,php,unit-testing,selenium,phpunit,Php,Unit Testing,Selenium,Phpunit,我正在尝试使用PHPUnit运行selenium测试用例。我要做的第一件事是尝试登录功能,这很好,但是我想在登录后运行一个功能来检查页面上的信息,但是它会打开一个新的浏览器,而不是在当前浏览器窗口中继续。这是一个问题的原因,因为页面设置为在窗口关闭时删除登录身份验证,因此如果使用$this->url()转到该页面,则会出现我需要登录的错误。这是我现在的代码,它启动浏览器并运行函数来测试登录表单,然后关闭浏览器,打开新的浏览器并运行链接检查。这当然会导致由于身份验证错误导致的错误,因为窗口已关闭。

我正在尝试使用PHPUnit运行selenium测试用例。我要做的第一件事是尝试登录功能,这很好,但是我想在登录后运行一个功能来检查页面上的信息,但是它会打开一个新的浏览器,而不是在当前浏览器窗口中继续。这是一个问题的原因,因为页面设置为在窗口关闭时删除登录身份验证,因此如果使用$this->url()转到该页面,则会出现我需要登录的错误。这是我现在的代码,它启动浏览器并运行函数来测试登录表单,然后关闭浏览器,打开新的浏览器并运行链接检查。这当然会导致由于身份验证错误导致的错误,因为窗口已关闭。我可以在一个函数中运行所有的测试,但这确实是一种草率的编码,我希望避免这种情况。有人知道怎么解决这个问题吗

<?php
    class TestMyTest extends PHPUnit_Extensions_Selenium2TestCase {
        public function setUp()
        {
            $this->setBrowser("firefox");
            $this->setBrowserUrl("https://**************************");
        }

        public function testLoginForm()
        {

            $this->url("login.php");
            $this->byLinkText('Forgot your password?');
            $form = $this->byCssSelector('form');
            $this->byName('username')->value('test');
            $this->byName('password')->value('1234');
            $form->submit();
        }


        public function testCheckForMainMenueLinks ()
        {
            $this->url("index.php");
            $this->byLinkText('Home');
            $this->byLinkText('Products');
            $this->byLinkText('About us');
            $this->byLinkText('Contact');
        }
    }
?>

在一个功能中进行组装,因为这是功能测试。 我对phpunit和selenium也很陌生,但我成功地在一个系统中测试了所有这些:

public function testAuth(){  

$this->open('register.php&XDEBUG_SESSION_START=PHPSTORM');
$this->assertTextPresent('Register');
$this->type('name=email', "...");
$this->type('name=firstname', "...");
$this->type('name=lastname', "...");       
$this->type('name=password', "...");
$this->type('name=verifyPassword', "...");
$this->click("reg-butt");
$this->waitForPageToLoad("5000");
$this->assertTextPresent('Profile');
$this->open('logout.php');
$this->assertTextPresent('text from redirect page');
$this->open('login.php');
.....

}

Okej所以我想你可以直接从另一个函数调用这个函数,比如:

public function testOne
{
#code
$this->Two();
}

public function Two()
{
#code
$this->Three();
}

public function Three()
{
#code
}

以此类推,这将在没有新浏览器的情况下运行下一个函数,但是,如果它在任何测试中的任何地方失败,整个测试将停止,这样反馈就不会像单个测试一样好。

您可以调用PHPUnit\u Extensions\u SeleniumTestCase::shareSession(true)来启用浏览器窗口重用

在报告中说:

Selenium 1.1.1提供了一个实验性功能,允许用户在测试之间共享会话。唯一受支持的情况是在使用单个浏览器时在所有测试之间共享会话。在引导文件中调用PHPUnit_Extensions_SeleniumTestCase::shareSession(true)以启用会话共享。如果测试不成功(失败或不完整),会话将被重置;用户可以通过重置cookie或从被测应用程序注销(使用tearDown()方法)来避免测试之间的交互


要在
Selenium2TestCase
中共享浏览器会话,必须在初始浏览器设置中设置
sessionStrategy=>“共享”

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

另一种选择(默认)是
“隔离”

设置共享会话的一种优雅方法是使用PHPUnit的
setUpBeforeClass()
方法:

public static function setUpBeforeClass()
{
    self::shareSession(true);
}

你能提供一些导致问题的代码片段吗?嗯。。。我原以为这样行得通,但现在它不断打开新窗口。我再也不确定这是否管用了。这里也有同样的经历(…但我刚刚发现:)这对我来说非常有效,而且比其他一些解决方案要简单得多!是的,找到它我很兴奋:)终于有一次领先于曲线了,哈哈。