【问题标题】:How can I find elements containing a specific string by xpath in php?如何在 php 中通过 xpath 找到包含特定字符串的元素?
【发布时间】:2020-01-07 10:19:31
【问题描述】:

对于自动测试,我希望检查包含特定字符串的行的复选框。 当我在控制台中通过 xpath 搜索元素时,它会准确找到我想要的元素,但是当我运行测试时,它会检查所有复选框,无论它们是否包含该字符串。

我认为问题出在功能上:

public function iCheckCheckboxInRowsWith($col){

    $checkboxes = $this->getSession()->getPage()->findAll(
selector:'xpath',    
    sprintf('//table/tbody/tr[td[contains(text(), %s)]]/td/input[@type="checkbox"]',
    $col));    
    dump($checkboxes);    
    foreach( $checkboxes as $checkbox){    
        $checkbox->click();
    }

}

在终端中,我看到数组 $checkboxes(我已转储)包含所有复选框。 我该如何解决?

【问题讨论】:

    标签: php selenium xpath behat


    【解决方案1】:

    尝试使用以下 XPath。它可能有效。

    sprintf('//table/tbody/tr/td[contains(text(), %s)]/input[@type="checkbox"]', $col)
    

    或尝试关注

    sprintf('//table/tbody/tr/td[contains(., %s)]/input[@type="checkbox"]', $col)
    

    【讨论】:

    • 仍然无法正常工作。我认为 Xpath 是正确的。但该函数不将其作为过滤器。
    • 是否还在点击所有复选框?
    • 尝试第二个。它可能有效。请检查我更新的答案。使用 .(dot) 代替 text()
    • 对于 socond 版本,它不会检查任何一个。在控制台中也找不到该元素。
    • 我认为问题不是xpath,而是$checkboxes的定义。
    【解决方案2】:

    你可以使用:

    sprintf("//table/tbody/tr/td[contains(., '" +col+ "')]/input[@type='checkbox']"));
    

    【讨论】:

    • 它不起作用。正如我之前提到的,问题不是 xpath 而是 $checkboxes 的定义
    【解决方案3】:

    虽然我在注释中声明 $col 是一个字符串,但我仍然必须将 %s 放在引号中,所以:

    //table/tbody/tr/td[contains(text(), "%s")]/preceding::td[1]/input[@type="checkbox"]
    
    

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2017-10-10
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多