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

时间:2014-07-08 19:20:10

标签: php drupal selenium

最近编辑::解决问题的方法

事实证明我使用了错误的元素id提交按钮,因为我认为页面上只有一个表单..但是在底部有一个第二个向下我没见过。所以我认为我的问题一方面可能不相关或不正确。

但是,我认为以下@Purus的答案很有价值,因为它指出在Se中,表单应该使用 - > submit()和元素 - > click()提交。

原始帖子

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

  1. 我有一个将登录并导航到“创建用户”页面的脚本

  2. 当脚本填写字段 - 部分 完全 时 - 表单始终为返回所有字段丢失..好像没有输入任何内容。然而,观看浏览器,我可以看到字段已填充。

  3. 当我开车浏览器并手动浏览相同的步骤,甚至只是部分填写表格 - 我填写的那些字段,当页面重新加载告诉我我没有&#时再次显示39;填写表格。

  4. 所以如果我进入了#abc'对于自己驾驶浏览器的第一个字段,字符串' abc'表单重新加载时出现在同一字段中。

    当Se推动这些步骤时,不会发生 - 提交表单并重新加载时,所有输入的字段都会丢失。

    浏览器考虑事项

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

    DRUPAL CONSIDERATION

    它可能与Drupal有关吗? ..但是我不知道从Drupal的角度来看 - 手动浏览或Se浏览,看起来和我理解的一样。

    然而,确实让我觉得它可能与Drupal如何设置表单有关,我可以在Se的同一站点上成功访问登录表单。所以它适用于一种形式,但不适用于另一种形式......?!

    示例

    以下是整个测试脚本的正文。环境setup是PHPUnit,其中包含Facebook PHP WebDriver for Se,在OS X 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));
        }
    }
    

    谢谢你看看

1 个答案:

答案 0 :(得分:2)

表单的点击和提交方式不同。

你可以试试submit()而不是click()吗?

而不是:

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

试试这个:

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

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