【问题标题】:How to assert the current URL?如何断言当前 URL?
【发布时间】:2013-05-08 22:00:00
【问题描述】:

我正在使用 PHPUnitSelenium-server 对我的 Yii 应用程序进行单元测试。

代码:

class StartSurveyRedirectTest extends WebTestCase
{
  public $fixtures=array(
    'sessions'=>'SurveySession',
    'surveys' => 'Survey',
  );

  public function testActive() {
    $survey = $this->surveys('survey_active');
    $user_id = 1;
    $imid = 'nl1234-9876';
    $this->open('veldwerk/survey/redirect?survey_id=' . $survey->survey_id . 
        '&user_id=' . $user_id . 
        '&imid=' . $imid . 
        '&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue()
    );

    //assert if redirected
    $this->assertNotEquals($this->url(),TEST_BASE_URL . 
        'veldwerk/survey/redirect?survey_id=' . $survey->survey_id . 
        '&user_id=' . $user_id . 
        '&imid=' . $imid . 
        '&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue()
    );
  }
}

我开始测试时的结果:

There was 1 error:

1) StartSurveyRedirectTest::testActive

Method url not defined.

D:\workspace\Pi\framework\test\CWebTestCase.php:63
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27

Caused by
BadMethodCallException: Method url not defined.

D:\workspace\Pi\framework\test\CWebTestCase.php:63
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27

所以我真正想测试的是用户是否被重定向。我认为最简单的方法是检查 URL,但事实证明它不起作用?虽然在 selenium 文档和 PHPUnit 文档中说它可以..

Yii 框架不支持这个吗?还是我做错了什么?

【问题讨论】:

    标签: selenium yii phpunit


    【解决方案1】:

    不要使用url作为方法,尝试将其作为属性:

    $this->url

    我现在在工作,可以检查一下。我认为 PHPUnit 与 Selenium 的正确代码是:

    $driver->getCurrentPageUrl();

    所以它是来自驱动程序实例的方法。

    【讨论】:

    • 谢谢,但是Unknown property 'url' for class 'StartSurveyRedirectTest'. 请记住我正在测试一个 Yii 应用程序
    • 我已经用正确的路径更新了我的答案以获取 url。为什么要测试一个用 YII 编写的应用程序?测试本身不是用 Yii 写的吧?我不确定StartSurveyRedirectTest 是什么,但您应该在某个地方创建WebDriver 的新实例,并且该变量是我们需要从中调用getCurrentPageUrl() 的变量。有意义吗?
    • 感谢@ragamuffin 让我了解驱动程序。我能够弄清楚这个驱动程序是PHPUnit_Extensions_SeleniumTestCase_Driver 的一个实例,这让我找出答案
    【解决方案2】:

    原来PHPUnit_Extensions_SeleniumTestCase_DriverWebTestCase 我在测试中扩展的Yii 类的祖先类。

    PHPUnit_Extensions_SeleniumTestCase_Driver 实现方法 getLocation() 保存当前浏览器 url。这让我可以使用$this->getLocation()

    SeleniumTestCase_Driver class reference

    我的代码结果:

    //assert if redirected
    $this->assertNotEquals($this->getLocation(),TEST_BASE_URL . 
        'veldwerk/survey/redirect?survey_id=' . $survey->survey_id . 
        '&user_id=' . $user_id . 
        '&imid=' . $imid . 
        '&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue()
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-07
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多