cakephp 3 selenium facebook Web驱动程序验证
我正在使用CakePHP3、selenium facebook web驱动程序和phpunit 我的问题是,我无法访问需要身份验证的页面。我已经尝试添加了我在控制器单元测试中使用的相同身份验证会话。这不管用cakephp 3 selenium facebook Web驱动程序验证,php,facebook,selenium,cakephp,phpunit,Php,Facebook,Selenium,Cakephp,Phpunit,我正在使用CakePHP3、selenium facebook web驱动程序和phpunit 我的问题是,我无法访问需要身份验证的页面。我已经尝试添加了我在控制器单元测试中使用的相同身份验证会话。这不管用 $this->session(['Auth.User.id' => 1, 'Auth.User.role' => 'admin']); 然后我让测试先登录,然后再执行其他测试。这不管用。我想我必须添加一个会话 <?php use \Facebook\Web
$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
}
我找到了一个解决方案。将登录方法添加到测试。这将访问您的登录页面并输入参数中提供的数组数据
//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();
}
然后将登录详细信息添加到数组变量中,并在执行测试之前调用login方法
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();
}