-1

我在 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 中的每个数组元素。这是怎么回事。

4

2 回答 2

1

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

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

或者

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

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

于 2013-09-06T09:24:36.723 回答
1

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

for my $element (@{ $elem }) {
    # do stuff
}
于 2013-09-06T09:21:48.410 回答