由于集成限制,我不得不通过无头浏览器注册人员,因为该平台没有API。
我可以通过selenium和PHP Unit在我的symfony上完成这项工作。这个问题是,硒必须经过我认为不理想的全部。
这是我的命令:
xvfb-run --server-args="-screen 0, 1366x768x24" selenium-standalone start
我希望使用Symfony进程类,我可以运行命令,如下所示:
public function fillFormAndSubmit($inputs,$url,$form)
{
$process = new Process('/usr/bin/xvfb-run --server-args="-screen 0, 1366x768x24" selenium-standalone start');
//$process = new Process('echo Tecmint is a community of Linux Nerds > /tmp/xvfb-run.log 2> /tmp/xvfb.err');
$process->run();
usleep(3000000);
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
$this->webDriver->get($url);
$body = $this->webDriver->findElement(\WebDriverBy::cssSelector('body'))->sendKeys(array(\WebDriverKeys::CONTROL, 't'));
$form = $this->webDriver->findElement(\WebDriverBy::className($form));
foreach ($inputs as $input) {
if($input['type'] == 'select')
{
//PHPUnit_Extensions_Selenium2TestCase_Element_Select::fromElement($input['id'])->selectOptionByValue($input['value']);
//PHPUnit_Extensions_Selenium2TestCase_Element_Select::fromElement($this->byId('selectMenu'))->selectOptionByValue('t3');
//$this->select($this->byId($input['id']))->selectOptionByValue($input['value']);
$select = new \WebDriverSelect($form->findElement(\WebDriverBy::id($input['id'])));
$select->selectByValue($input['value']);
}
elseif($input['type'] == 'checkbox')
{
$form->findElement(\WebDriverBy::id($input['id']))->click();
}
else {
//echo $input['id'];
$form->findElement(\WebDriverBy::id($input['id']))->sendKeys($input['value']);
}
}
$form->submit();
echo shell_exec('pkill -f selenium-standalone');
//$this->waitForUserInput();
}
但是,当我尝试按需运行服务时,shell命令不会触发。有没有更好的方法呢?如果没有,任何人都知道如何让它工作?