5

我正在使用 PHPUnit & Selenium2 服务器。我正在使用 PageObject 模式。对于一个页面对象,我得到一个 webdriver 的实例并执行必要的功能。

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

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 正常,其余的测试将执行,直到另一个测试用例失败。

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

4

2 回答 2

4

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

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

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

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

你可以写你的onNotSuccessfulTest方法:

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

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

于 2013-12-09T01:32:47.743 回答
0

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

<phpunit bootstrap="bootstrap.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     stopOnFailure="false">
于 2017-07-21T10:19:32.440 回答