Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么Selenium表单提交返回时缺少所有字段?_Php_Drupal_Selenium - Fatal编程技术网

Php 为什么Selenium表单提交返回时缺少所有字段?

Php 为什么Selenium表单提交返回时缺少所有字段?,php,drupal,selenium,Php,Drupal,Selenium,最近的编辑::找到问题的解决方案 事实证明,我对submit按钮使用了错误的元素id,因为我认为页面上只有一个表单。。但在底部有第二个单程下降,我没有看到。所以我认为我的问题一方面可能不相关也不正确 然而,我认为下面@Purus的回答很有价值,因为它指出在Se中,表单应该使用->submit()提交,元素应该使用->click() 原创帖子 我正在为基于Drupal的网站编写Se(Selenium)测试工具。我遇到了这个我不理解的问题。事情是这样的: 我有一个脚本,可以登录并导航到创建用户页面

最近的编辑::找到问题的解决方案

事实证明,我对submit按钮使用了错误的元素id,因为我认为页面上只有一个表单。。但在底部有第二个单程下降,我没有看到。所以我认为我的问题一方面可能不相关也不正确

然而,我认为下面@Purus的回答很有价值,因为它指出在Se中,表单应该使用->submit()提交,元素应该使用->click()

原创帖子

我正在为基于Drupal的网站编写Se(Selenium)测试工具。我遇到了这个我不理解的问题。事情是这样的:

  • 我有一个脚本,可以登录并导航到创建用户页面

  • 当脚本部分地或完全地填写字段时,表单总是返回,并且缺少所有字段。。好像什么也没有输入。然而,通过观察浏览器,我可以看到字段已填充

  • 当我驱动浏览器,手动浏览相同的步骤,甚至只是部分填写表单时——我填写的那些字段,在页面重新加载时再次显示,告诉我没有填写表单

  • 因此,如果我在自己驱动浏览器时为第一个字段输入了“abc”,则在表单重新加载时,字符串“abc”将出现在同一字段中

    Se执行步骤时,不会发生这种情况-提交和重新加载表单时,所有输入的字段都将丢失

    浏览器考虑事项

    在寻找解决方案时,一些人说这可能是一个浏览器问题。通过使用Facebook web驱动程序,我在Firefox和Chrome中重现了相同的问题

    DRUPAL考虑因素

    是否可能与Drupal有关。。但我不明白,因为从Drupal的角度来看,手动浏览或Se浏览,看起来和我理解的一样

    然而,让我觉得可能是Drupal如何设置表单的原因是,我能够使用Se在同一站点上成功访问登录表单。所以它适用于一种形式,但不适用于另一种形式

    示例

    下面是整个测试脚本的主体。环境署。安装程序是PHPUnit,带有Facebook PHP WebDriver for Se,运行在OSX Mavericks上

    require_once './path_config.php';
    class FormDemoTest extends PHPUnit_Framework_TestCase
    {
        public static $LOGIN_PAGE_URL = 'https://dev.abc.com/login/';
        public static $FORM_PAGE_URL = 'https://dev.abc.com/create-user';
    
        var $driver;
    
        public function setUp()
        {
            $host = 'http://localhost:4444/wd/hub'; // this is the default
            $capabilities = DesiredCapabilities::firefox();
            $this->driver = RemoteWebDriver::create($host, $capabilities, 5000);
        }
    
        public function tearDown()
        {
            $this->driver->quit();
            parent::tearDown();
        }
    
        public function testCreateForm()
        {
            $id = 'jules';
            $pwd = '22';
            $this->driver->get(self::$LOGIN_PAGE_URL);
            $this->findElementById('login')->sendKeys($id);
            $this->findElementById('pwd')->sendKeys($pwd);
            $this->findElementById('submit')->click();
    
            sleep(1);
    
            $this->driver->get(self::$FORM_PAGE_URL);
            $this->findElementById('first')->sendKeys('abc');
            $this->findElementById('last')->sendKeys('efg');
            $this->findElementById('submit')->click();
    
            $expectedTitle = "Create User";
            self::assertEquals($expectedTitle, $this->driver->getTitle());
        }
    
        public function findElementById($id=null) {
            return $this->driver->findElement(WebDriverBy::id($id));
        }
    }
    

    感谢您查看

    对于表单,单击和提交是不同的

    是否可以尝试提交()而不是单击()

    与此相反:

    $this->findElementById('submit')->click();
    
    试试这个:

    $this->findElementById('login')->submit();
    

    submit()方法提交表单,您可以从任何元素调用它,并提交相应的值。

    您在这里提出了一个重要的观点,即存在submit()方法,这就是表单应该使用的方法;谢谢你的洞察力。不幸的是,我仍然看到同样的问题——提交表单会重新加载我输入为空的字段的页面。我对代码所做的唯一更改是按照您的建议,将对->click()的调用更改为->submit()。奇怪的情况在我看来?!有我要检查的url吗?嗨@Purus,我正在等待项目经理的批准。共享一个url。我感谢你对这条线索的关注。再保险。那很好。