2015-04-07 41 views
0

我在使用PHPUnit和Selenium時使用CakePHP時遇到了問題,並且在Internet上很難找到任何幫助。我根本無法弄清楚如何在CakePHP中識別來自我的Selenium代理的請求,以便我可以相應地設置連接和數據庫環境。無法在CakePHP 2.6中識別Selenium請求

任何幫助將不勝感激!有關在請求來自Selenium時設置CakePHP應用程序的數據庫環境的最佳方式的更多信息也非常受歡迎。

回答

1

第一步是將用戶代理設置爲Selenium,以便將您的應用程序識別爲特殊的東西。請參閱Selenium WebDriver Documentation

然後在CakePHP中,您可以使用global functionenv()來測試HTTP_USER_AGENT值。 env是用於檢查環境變量(如$_SERVER)的包裝器。

例如在database.php文件:

var $default = array(
    'datasource' => 'Database/Mysql', 
    'persistent' => false, 
    'host' => 'localhost', 
    'login' => 'user', 
    'password' => '****', 
    'database' => 'production_db', 
    'prefix' => '' 
); 

function __construct() { 
    // set database connection settings for testing environment 
    if (stristr(env('HTTP_USER_AGENT'), 'selenium') { 
     $this->default['database'] = 'test_db'; 
    } 
} 

如果不能設置用戶代理與硒,也許你可以通過一個GET變量與URL。

實施例使用Selenium擴展PHPUnit的:

$this->setBrowserUrl('http://www.example.com?selenium=true'); 

在CakePHP你將訪問變量陣列$_GET英寸

+0

很棒!非常感謝!現在唯一的問題是,不幸的是,我沒有找到如何在PHPUnit Selenium擴展中設置用戶代理。 WebDriver文檔幾乎涵蓋了任何PHP方式。我還發現PHPUnit文檔的Selenium部分不是很全面。在使用PHPUnit和Selenium之前,你是否做過類似的事情? – lucasnadalutti

+1

也許你可以在URL中傳遞一個get變量?我用這個信息更新了答案。 –

+0

這也是一個很好的解決方案,雖然不夠優雅。再次感謝,會嘗試! – lucasnadalutti