【问题标题】:How do you set the value of an input field by complex selector?如何通过复杂选择器设置输入字段的值?
【发布时间】:2018-08-28 02:40:46
【问题描述】:

我想设置某个formless输入字段的值。

my $field = $w->selector('tr.edit td[data-attribute="name"] input', single => 1);

找到了。

$field->attributes->{value} = 'test';

没有明显效果。

两者

$w->field($field => 'test');

$w->field('tr.edit td[data-attribute="name"] input' => 'test');

No elements found for form number 1 出错。

【问题讨论】:

标签: perl browser-automation


【解决方案1】:

当我遇到这个问题时,我会使用eval 方法并让Javascript(或jQuery,如果它加载在页面中)负责选择和设置值。对我来说,主要是选择下拉菜单,页面上的 Angular 应用程序需要 changeclick 事件。

$mech->eval( q{$(tr.edit td[data-attribute="name"] input).val('test')} );

如果没有 jQuery,我相信您的 Google fu 会帮助您。

【讨论】:

    【解决方案2】:

    你也许可以使用类似下面的东西

    $w->driver->send_message('DOM.setAttributeValue', nodeId => 0+$field->nodeId, name => 'value', value => "test" )->get
    

    来自实际源码的参考

    https://metacpan.org/source/CORION/WWW-Mechanize-Chrome-0.10/lib/WWW/Mechanize/Chrome.pm#L3137

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多