【问题标题】:Select elements using Selenium Webdriver PHP?使用 Selenium Webdriver PHP 选择元素?
【发布时间】:2013-10-22 14:19:48
【问题描述】:

我有许多页面元素,我想将它们存储在一个变量中并使用 Selenium Webdriver PHP 循环。

例如:

< cite > Name 1 < /cite >
< cite > Name 2 < /cite >
<cite > Name 3< /cite >

我正在使用以下代码,但它没有给我上面的结果(即名称 1)等。如何使用 Selenium Webdriver 从元素中获取文本。

$users = $driver->findElements(
  WebDriverBy::xpath('//cite')
)->getText();
foreach($users as $u)
         {
             echo $u;
         }

我正在使用 Selenium Webdriver Facebook 包装器

【问题讨论】:

  • 你需要使用findElement()而不是findElements()来访问getText()
  • 是的,但这只会让我获得第一个元素,它不会将所有元素作为我可以循环的数组/对象...我如何获得变量 $users 中的所有元素?跨度>
  • 因为我需要从多个元素中获取所有文本,有什么想法吗?还有其他方法可以抓取所有元素吗?
  • 有人有什么想法吗?

标签: selenium webdriver selenium-webdriver


【解决方案1】:

我不太了解 PHP,但在 Java 中,你会做类似的事情:

List<WebElement> elements = driver.findElements(By.xpath("//cite"));
for (WebElement element: elements) {
  System.out.println(element.getText());
}

鉴于此,我假设 PHP 等效项是这样的:

$users = $driver->findElements(WebDriverBy::xpath('//cite'));
foreach($users as $u)
  {
    echo $u->getText();
  }

【讨论】:

  • 试过但给了我致命错误:在非对象上调用成员函数 getText()
  • 再次,我将首先承认我对 PHP 以及您正在使用的绑定几乎一无所知。底线是您的初始代码有缺陷。 findElements() 应该返回一个对象列表,并遍历返回的对象列表,您应该能够在每个对象上调用 getText()。您需要弄清楚您正在使用的 PHP 绑定正在做什么以及 findElements() 返回的对象的结构是什么。
【解决方案2】:

JimEvan 的回答是正确的。如果您收到“非对象”类型错误,您应该检查以确保 findElements() 调用实际上返回了某些内容:

$users = $driver->findElements(WebDriverBy::xpath('//cite'));
fwrite(STDOUT, "Number of users: " . count($users));

也许它与元素标签中的空格字符有关(只是猜测)?

【讨论】:

    【解决方案3】:

    正确的代码是。

    $users = $driver->findElements(WebDriverBy::xpath('//cite')); foreach($users as $u) {echo $u->getText();}
    

    【讨论】:

    • 您能详细说明一下吗?
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多