6

我正在尝试通过 CSS 使用 Selenium 2 检查页面上的元素是否存在。有人有任何使用 PHP Selenium Webdriver Facebook包装器的示例吗?

我试过下面的代码:

if($driver->findElement(WebDriverBy::xpath("image-e4e")) != 0)
{
}

但是给了我这个错误:

致命错误:未捕获的异常 'NoSuchElementWebDriverError' 带有消息'无法定位元素:{“method”:“xpath”,“selector”:“image-e4e”}

4

5 回答 5

15

按照设计,findElement如果找到 WebDriverElement,则返回它,但找不到时会引发异常。

要检查元素是否在页面上而不出现异常,诀窍是使用findElements. findElements返回页面上找到的所有元素的数组。如果没有找到,则返回一个空数组。

if (count($driver->findElements(WebDriverBy::xpath("image-e4e"))) === 0) {
  echo 'not found';
}
于 2013-10-23T19:23:05.323 回答
2

用途:$driver->findElements代替findElement

如果元素不存在,findElements 将返回一个空数组并且不会抛出异常。

于 2016-06-15T08:02:40.330 回答
1

您还可以使用sizeof()PHP 中的内置函数:

$check = $driver->findElements(WebDriverBy::xpath('image-e4e'));
if (sizeof($check) > 0) {
    echo "success";
}

OR 也可用于count()函数:

if (count($driver->findElements(WebDriverBy::xpath('image-e4e'))) > 0) {
    echo "success";
}

输出:如果 XPath 元素在页面上可用,那么它会给你成功


如果你想使用findElement那么:

$checkXpath = 'image-e4e';
$checkXpath = $this->findElementByXpath($driver, $checkXpath);
$check = $driver->findElement($checkXpath);
if (count($check) > 0) {
    echo "success";
}

或者

$checkXpath = WebDriverBy::xpath('image-e4e');
$check = $driver->findElement($checkXpath);
if (count($check) > 0) {
    echo "success";
}

输出:如果 XPath 元素在页面上可用,那么它会给你成功


注意:当元素在页面上不可用时,该findElement方法会引发NoSuchElementException异常。然而,findElements当元素不可用或页面上不存在时,该方法返回一个空列表。

于 2020-01-11T16:20:34.980 回答
0

那是因为你的 xpath 不好。

如果您想继续使用 xpath,那么您的选择器将是

//*[@id='image-e4e']

如果您有开放的心态,请习惯 CSS 选择器。它们更快,更具可读性

WebDriverBy::cssSelector("#image-e4e")

这当然是假设 ID 是image-e4e. 您的 xpath 失败的原因是 xpath 试图找到一个带有标签 name 的直接孩子image-e4e。您想解析整个 pom 以查找具有等于的属性的元素image-e4e。是身份证还是名字,我不知道。

于 2013-10-21T14:49:36.663 回答
-1
if($driver->findElement(WebDriverBy::id("image-e4e")) != 0)
{

}

试试上面的逻辑,我肯定它会成功的。

于 2014-04-07T05:36:18.193 回答