【问题标题】:cakephp 3 selenium facebook webdriver authcakephp 3 selenium facebook webdriver auth
【发布时间】:2016-06-28 08:47:56
【问题描述】:

我正在使用 cakephp 3、selenium facebook web 驱动程序和 phpunit。

我遇到的问题是我无法访问需要身份验证的页面。我尝试添加在控制器单元测试中使用的相同身份验证会话。这不起作用。

$this->session(['Auth.User.id' => 1, 'Auth.User.role' => 'admin']);

然后我让测试先登录,然后再执行其他测试。这没有用。我想我必须添加一个会话。

    <?php

use \Facebook\WebDriver\Remote\DesiredCapabilities;
use \Facebook\WebDriver\Remote\RemoteWebDriver;
use \Facebook\WebDriver\WebDriverBy;

/**
 * Description of UserEditTest
 *
 * @author john
 */
class UserEditTest extends PHPUnit_Framework_TestCase 
{

    protected $webDriver;




    public function setUp()
    {
         $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', DesiredCapabilities::firefox());
        // $this->session(['Auth.User.id' => 1, 'Auth.User.role' => 'admin']);
    }

    protected $url = 'http://localhost:81/dev/usedCars/users/edit/11'; 


      //return should contain Please enter your username and password
    public function validLoginProvider()
    {
        $inputs[] = [
            [
                'username'              => 'testuser',
                'password'              => 'test',               
            ]
        ];

        return $inputs;
    }
    //login input
  public function fillLoginFormAndSubmit($inputs)
{


    $this->webDriver->get('http://localhost:81/dev/usedCars/users/login');
    $form = $this->webDriver->findElement(WebDriverBy::id('login'));
    var_dump($inputs);

    foreach ($inputs as $input => $value) {
        $form->findElement(WebDriverBy::name($input))->sendKeys($value);      
    }
    $form->submit();
}

/**
 * @dataProvider validLoginProvider
 */
public function testValidFormSubmission(array $inputs)
{
    $this->fillLoginFormAndSubmit($inputs);

    $content = $this->webDriver->findElement(WebDriverBy::tagName('body'))->getText();
    $this->assertContains('Showroom', $content);

    testValidEditSubmission();

}



 //for testing the edit view page
      public function validInputsProvider()
    {

           $inputs[] = [
            [
               'interests'              => 'changed'
            ] 
        ];

        return $inputs;
    }

     //for testing the edit page
    public static function invalidInputsProvider()
    {
         $inputs[] = [
            [              
                'email'              => 'mypassword'

            ]
        ];


        return $inputs;
    }



      public function fillFormAndSubmit($inputs)
{
       // $this->session(['Auth.User.id' => 1, 'Auth.User.role' => 'admin']);

    $this->webDriver->get('http://localhost:81/dev/usedCars/users/edit/11');
    $form = $this->webDriver->findElement(WebDriverBy::id('edit'));
    var_dump($inputs);

    foreach ($inputs as $input => $value) {
        $form->findElement(WebDriverBy::name($input))->sendKeys($value);


    }

    $form->submit();
}


/**
 * @dataProvider validInputsProvider
 */
public function testValidEditSubmission(array $inputs)
{


    $this->fillFormAndSubmit($inputs);

    $content = $this->webDriver->findElement(WebDriverBy::tagName('body'))->getText();
    $this->assertContains('The user has been saved', $content);
}


/**
 * @dataProvider invalidInputsProvider
 */
public function testInvalidEditSubmission(array $inputs)
{
    $this->fillFormAndSubmit($inputs);

   $content = $this->webDriver->findElement(WebDriverBy::tagName('body'))->getText();
     $this->assertContains('valid email', $content);
}

    public function tearDown()
{
    $this->webDriver->quit();
}   //put your code here
}

【问题讨论】:

    标签: php facebook selenium cakephp phpunit


    【解决方案1】:

    我找到了解决方案。在测试中添加登录方法。这将访问您的登录页面并输入参数中提供的数组数据。

         //login input
      public function fillLoginFormAndSubmit($inputs)
    {        
        $this->webDriver->get('http://localhost:81/dev/usedCars/users/login');
        $form = $this->webDriver->findElement(WebDriverBy::id('login'));
        var_dump($inputs);
    
        foreach ($inputs as $input => $value) {
            $form->findElement(WebDriverBy::name($input))->sendKeys($value);      
        }
        $form->submit();
        }
    

    然后将登录详细信息添加到数组变量中,并在执行测试之前调用登录方法。

        public function fillFormAndSubmit($inputs)
        {
    //add login details here
                  $login = array("username"=>"testuser","password"=>"test");
                 //call login method            
             $this->fillLoginFormAndSubmit($login);
    
            $this->webDriver->get('http://localhost:81/dev/usedCars/users/edit/11');
            $form = $this->webDriver->findElement(WebDriverBy::id('edit'));
            var_dump($inputs);
    
            foreach ($inputs as $input => $value) {
                $form->findElement(WebDriverBy::name($input))->sendKeys($value);
    
    
            }
    
            $form->submit();
            }
    

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      相关资源
      最近更新 更多