Mojolicious测试:如何使用css选择器获取输入值

时间:2014-08-23 15:47:25

标签: html perl css-selectors mojolicious

我正在为Mojolicious应用程序编写测试,该应用程序发送一些HTML表单数据,然后检查它们是否显示在后续的get请求中。

$t->post_ok('/intern/offer/edit'  => form  => {
      'angebotsdatum'    => '2014-02-22',
      'gastname'         => 'Hansi Hinterseer',
      'einmalkosten'     => '128.00',
      'tage'             => '9',
      'ankunft'          => '2014-01-01',
      'gesamtpreis'      => '764.00',
      'abfahrt'          => '2014-01-10',
      'tagespreis'       => '70.71',
      'apartments_id'    => 'HAG28',
      'id'               => '1',
      'aufenthaltspreis' => '636.39'
    }
)
->status_is(200)
->content_like( qr/Angbot bearbeiten/ )
;

$t->get_ok('/intern/offer/edit/1')
    ->status_is(200)
    ->text_like('html body h2' => qr/Intern - Angebote/ )
    ->text_like('html body h3' => qr/Angbot bearbeiten/ )
    ->text_is('html body form div#adatum label' => 'Angebotsdatum:' )
    ->text_is('html body form div#adatum input#angebotsdatum value'  => '2014-02-22' )
; 

不幸的是,输入元素值的最后一次测试失败,因为返回的值总是为空。表格 - 标签的测试(此处' Angebotsdatum:')成功。

如何从HTML表单中选择并取回输入元素

表单的HTML代码是:

<div id="adatum">
    <label>Angebotsdatum:</label>
    <input type="text" name="angebotsdatum" value="2014-02-22" id="angebotsdatum">
</div>

这是测试输出:

#   Failed test 'exact match for selector "html body form div\#adatum input[name=angebotsdatum] value"'
#   at t/1210-workflow_booking.t line 80.
#          got: ''
#     expected: '2014-02-22'

所以我们可以清楚地看到,CSS选择器返回空值

2 个答案:

答案 0 :(得分:2)

来自Test::Mojo

  

text_is - 首先检查CSS选择器的文本内容   匹配HTML / XML元素以与Mojo :: DOM中的完全匹配。

at方法

  

在DOM结构中找到与CSS选择器匹配的第一个元素   将它作为Mojo :: DOM对象返回,如果没有,则返回undef   找到。支持Mojo :: DOM :: CSS中“SELECTORS”的所有选择器。

html body form div#adatum input#angebotsdatum value
                                             ^^^^^^ - this isn't valid

恕我直言,是无效的CSS选择器。

您可以尝试下一个(缩短的)选择器:

div#adatum > input[value="2014-02-22"]

所以找到元素<input>的属性等于2014-02-22

  

E [富= “酒吧”]   一个E元素,其foo属性值恰好等于bar。

更多信息Mojo::DOM::CSS#SELECTORS

因此,足以用所需的值测试元素的存在:

->element_exists('input[value="2014-02-22"]', '...');

Ps:我不是一个非常有经验的Mojo开发人员,所以......

答案 1 :(得分:1)

input#angebotsdatum表示您正在寻找具有<input>属性的id=angebotsdatum元素,但您要查找的是name=angebotsdatum属性。所以我认为最后一次测试应该看起来像

->text_is('html body form div#adatum input[name=angebotsdatum] value' => ...)