Check 元素存在使用 PHP Selenium 2 Webdriver


Check element exists using PHP Selenium 2 Webdriver?

我正在尝试使用 Selenium 2 检查页面上的元素是否存在 CSS。有人有任何使用PHP Selenium网络驱动程序Facebook包装器的例子吗?

我尝试了以下代码:

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

但是给了我这个错误:

致命错误:未捕获的异常"NoSuchElementWebDriverError"与 消息"无法找到元素: {"方法":"xpath","selector":"image-e4e"}

根据设计,如果找到 WebDriverElement,findElement 会返回它,但在找不到时它会引发异常。

要检查元素是否在页面上而不会出现异常,诀窍是使用 findElements . findElements 返回在页面上找到的所有元素的数组。如果未找到任何内容,它将返回一个空数组。

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

用途:$driver->findElements findElement的内涵

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

你也可以

使用 PHP 中的 sizeof() 内置函数:

$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 方法在元素不可用或页面上不存在时返回空列表。

那是因为你的xpath不好。

如果你想继续使用xpath,那么你的seletor将是

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

如果你有一个开放的心态,习惯CSS选择器。它们更快,可读性更强

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

这当然是假设 ID image-e4e . 您的 xpath 失败的原因是 xpath 试图找到标记名为 image-e4e 的 immedate 子项。您希望解析属性等于 image-e4e 的元素的整个 POM 。这是ID还是名字,我不知道。

//https://www.guru99.com/images/1/073118_0611_Installatio8.png
if (count($crdriver->findElements(WebDriverBy::xpath('//*[@id="topOfPag"]/div[7]/div[1]/h1'))) === 1) {
    echo 'con1';
} else if (count($crdriver->findElements(WebDriverBy::xpath('//*[@id="topOfPage"]/div[7]/div[1]/h1'))) === 1){
    echo 'con2';
}else {
    echo 'fail';
}
if($driver->findElement(WebDriverBy::id("image-e4e")) != 0)
{
}

尝试上述逻辑,我相信它肯定会奏效。