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

use*_*413 5 php phpunit selenium-webdriver

我正在使用PHPUnit和Selenium2服务器.我正在使用PageObject模式.对于页面对象,我获得了webdriver的实例并执行必要的功能.

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

class SessionHelper {
    public static $first;
}
SessionHelper::$first = 0;
Run Code Online (Sandbox Code Playgroud)

然后在我的测试用例类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 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以在一个浏览器中执行所有测试.但是,如果一个测试用例失败; 通过尝试查找不存在的元素,所有其他测试用例都失败并显示消息"Undefined index:browserUrl".如果我更改它以在页面中查找已知元素,它可以正常工作.所以例如;

test_method_1:如果在此测试失败后未找到任何元素,则显示"Undefined index:browserUrl".

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

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

rNi*_*Nix 4

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

如果测试不成功(失败或不完整),会话将被重置;用户可以通过重置 cookie 或从被测应用程序注销(使用 TeaDown() 方法)来避免测试之间的交互

来自第 17 章 PHPUnit 和 Selenium(底部)

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

你可以写你的onNotSuccessfulTest方法:

public function onNotSuccessfulTest(Exception $e){
    throw $e;
}
Run Code Online (Sandbox Code Playgroud)

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