PHPUnit & Selenium2 如果一个案例失败,所有案例都会失败


PHPUnit & Selenium2 all cases fail IF one case fails

我正在使用PHPUnit和Selenium2服务器。我正在使用页面对象模式。对于页面对象,我获取了Web驱动程序的实例并执行了必要的功能。

为了保持单个浏览器的运行,我实现了一个粗略的解决方案,我在网络中发现了一个静态类中的驱动程序:

class SessionHelper {
    public static $first;
}
SessionHelper::$first = 0;

然后在我的测试用例类 setup() 方法中;

public function setUp(){
    if (SessionHelper::$first == 0 )
    {
        $this->setHost('localhost');
        $this->setPort((int)4444);            
        $this->setBrowser('firefox');        
        $this->setBrowserUrl('http://domain.com/lucky/web');            
        $this->shareSession(TRUE);
        $this->prepareSession();
        SessionHelper::$first = 1 ;
    }
}

通过这种方式,我设法在单个浏览器中执行所有测试。但是,如果一个测试用例失败;比如说,通过尝试查找一个不存在的元素,所有其他测试用例都失败,并显示消息"未定义的索引:browserUrl"。如果我更改它以在页面中查找已知元素,它可以正常工作。例如;

test_method_1 :如果在此测试失败后找不到任何元素,并显示"未定义的索引:browserUrl"。

如果test_method_1正常,其余测试将执行,直到另一个测试用例失败。

那么,我收到此错误的原因可能是什么?当一个测试用例失败时,我的会话会被销毁吗?

当一个测试用例失败时,您的会话将被销毁:

在测试不成功的情况下,会话将被重置(失败) 或不完整);由用户决定避免之间的交互 通过重置 Cookie 或从应用程序注销来进行测试 测试(使用 tearDown() 方法)

从第17章开始。PHPUnit和硒(底部)

方法 onNotSuccessfulTest 使用将会话设置为 null 的标志标记会话。在下一次测试运行时,PHPUnit 调用 prepareSession(),但参数为空。这就是在SessionStrategy_Shared中出现错误"未定义的索引"的原因。

您可以编写onNotSuccessfulTest方法:

public function onNotSuccessfulTest(Exception $e){
    throw $e;
}

有了它,会话不会被破坏。

将以下行添加到.xml文件中,这样即使一个测试用例失败,它也会运行下一个测试。

<phpunit bootstrap="bootstrap.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     stopOnFailure="false">