首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Selenium form-submit返回时缺少所有字段?

为什么Selenium form-submit返回时缺少所有字段?
EN

Stack Overflow用户
提问于 2014-07-08 19:20:10
回答 1查看 1.1K关注 0票数 2

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

原来我在提交按钮时使用了错误的元素id,因为我以为页面上只有一个表单。但在底部还有第二条路我没见过。因此,我认为我的问题一方面可能不相关,也可能是不正确的。

但是,我认为下面@Purus的答案是有价值的,因为它指出表单本身应该用->submit()提交,元素应该用->click()提交。

原始帖子

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

  1. 我有一个脚本,它将登录并导航到Create用户页面
  2. 当脚本填充字段-部分完全时,表单总是返回,所有字段都丢失。好像什么都没进去似的。然而,看着浏览器,我可以看到字段是填充的。
  3. 当我驱动浏览器并手动通过相同的步骤导航时,甚至只是对表单进行部分填充--我确实填写了这些字段--当页面重新加载时,会再次显示,告诉我没有完成表单。

因此,如果我在自己驱动浏览器时输入了第一个字段的'abc‘,那么当表单重新加载时,字符串'abc’就会出现在同一个字段中。

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

浏览器考虑

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

DRUPAL DRUPAL

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

然而,让我觉得Drupal是如何设置表单的东西,是我能够成功地使用Se访问同一个站点上的登录表单。所以它适用于一种形式,而不是另一种形式。?!

示例

下面是整个测试脚本的正文。环境局。安装程序是PHPUnit与Facebook,运行在OS小牛上。

代码语言:javascript
复制
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));
    }
}

谢谢你看一看

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-09 04:21:07

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

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

而不是这样:

代码语言:javascript
复制
$this->findElementById('submit')->click();

试试这个:

代码语言:javascript
复制
$this->findElementById('login')->submit();

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24640060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档