【问题标题】:iterate through perl object array遍历 perl 对象数组
【发布时间】:2013-09-06 09:13:21
【问题描述】:

我在 perl 中有这个对象

$elem = $driver->get_elements("//select[\@name[\"cars\"]//option");

<code><pre>
    1  Selenium::Remote::WebElement=HASH(0x600f700)
      'driver' => Selenium::Remote::Driver=HASH(0x5bb9618)
         -> REUSED_ADDRESS
      'id' => 95
    2  Selenium::Remote::WebElement=HASH(0x6012d18)
      'driver' => Selenium::Remote::Driver=HASH(0x5bb9618)
         -> REUSED_ADDRESS
      'id' => 96
    3  Selenium::Remote::WebElement=HASH(0x5ff29f8)
      'driver' => Selenium::Remote::Driver=HASH(0x5bb9618)
         -> REUSED_ADDRESS
      'id' => 97
    4  Selenium::Remote::WebElement=HASH(0x5ca26b8)
      'driver' => Selenium::Remote::Driver=HASH(0x5bb9618)
         -> REUSED_ADDRESS
      'id' => 98
    5  Selenium::Remote::WebElement=HASH(0x600b330)
      'driver' => Selenium::Remote::Driver=HASH(0x5bb9618)
         -> REUSED_ADDRESS
      'id' => 99

现在我想遍历 $elem 中的每个数组元素。 这是怎么回事。

【问题讨论】:

    标签: perl selenium moose


    【解决方案1】:

    您需要取消引用$elem,然后循环:

    for my $element (@{ $elem }) {
        # do stuff
    }
    

    【讨论】:

      【解决方案2】:

      Selenium::Remote::Driver 没有 get_elements 函数,据我从文档中可以看出。相反,find_elements 存在。它将在列表上下文中返回一个平面数组,或者在标量上下文中返回一个数组引用。也就是说,您可以这样做

      my @elems = $driver->find_elements(...);
      for my $elem (@elems) {
        ...
      }
      

      my $elems = $driver->find_elements(...)
      for my $elem (@$elems) {
        ...
      }
      

      有关如何使用引用的更多信息,请阅读perlreftut

      【讨论】:

        猜你喜欢
        • 2017-09-19
        • 1970-01-01
        • 2020-12-15
        • 2017-07-11
        相关资源
        最近更新 更多