5

我正在尝试使用 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');
        }
    }
?>
4

5 回答 5

7

要在 中共享浏览器会话Selenium2TestCase,您必须sessionStrategy => 'shared'在初始浏览器设置中进行设置:

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

替代(默认)是'isolated'.

于 2013-10-02T02:23:59.893 回答
4

Okej,所以我想您可以直接从另一个函数调用该函数,如下所示:

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

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

public function Three()
{
#code
}

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

于 2013-07-12T08:25:46.843 回答
1

在一项功能中制作资产,因为这是功能测试。我也是 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');
.....

}
于 2013-06-01T21:47:30.407 回答
1

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

public static function setUpBeforeClass()
{
    self::shareSession(true);
}
于 2016-08-12T18:45:40.477 回答
0

您可以调用 PHPUnit_Extensions_SeleniumTestCase::shareSession(true) 来启用浏览器窗口重用。

手册中它说:

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

于 2013-08-20T11:31:57.287 回答