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

标签 php drupal selenium

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

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

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

原始帖子

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

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

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

  3. 当我驾驶浏览器并手动执行相同的步骤时,甚至只填写部分表单时 - 我填写的那些字段会在页面重新加载时再次显示,告诉我我没有填写”填写表格。

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

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

浏览器考虑因素

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

DRUPAL 考虑

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

但是,确实让我认为这可能与 Drupal 设置表单的方式有关,是我能够使用 Se 在同一站点上成功访问登录表单。所以它适用于一种形式,但不适用于另一种形式..?!

示例

下面是整个测试脚本的主体。环境。安装程序是 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));
    }
}

感谢您的浏览

最佳答案

表单的点击和提交是不同的。

你可以尝试用submit()代替click()吗?

而不是这个:

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

试试这个:

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

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

关于php - 为什么 Selenium 表单提交返回时缺少所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640060/

相关文章:

php - CakePHP 缓存具有持续时间的元素

php - Codeigniter如何在 Controller 中使用jquery

templates - Drupal 8 Twig 模板 : get relative or absolute path from URI

mysql - Drupal db_select + MySQL 中的索引提示?

testing - 是否可以将 BDD 包含到一个即将完成的项目中?

php - 在重复键更新时使用 insert... 更新插入

php - Apache PHP 命令不会控制 Raspberry pi GPIO

Drupal MultiSite、多个站点或有机组

Python:引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.UnexpectedAlertPresentException:警报文本:无消息:

testing - 浏览器配置文件和用户代理在 UI 测试中的意义是什么?