我正在尝试使用 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)
{
}
尝试上述逻辑,我相信它肯定会奏效。