通过无头浏览器填充表单

时间:2017-04-27 21:30:01

标签: php symfony selenium

由于集成限制,我不得不通过无头浏览器注册人员,因为该平台没有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命令不会触发。有没有更好的方法呢?如果没有,任何人都知道如何让它工作?

0 个答案:

没有答案