使用PHP Selenium 2 Webdriver检查元素是否存在?

brccelvz  于 2023-08-02  发布在  PHP
关注(0)|答案(6)|浏览(130)

我正在尝试使用Selenium 2通过CSS检查页面上的元素是否存在。有人有使用PHP Selenium Webdriver Facebook Package 器的例子吗?
我尝试了下面的代码:

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

字符串
但给了我这个错误:
致命错误:未捕获的异常“NoSuchElementWebDriverError”,消息为“无法定位元素:{“method”:“xpath”,“selector”:“image-e4e”}

qmb5sa22

qmb5sa221#

按照设计,findElement在找到WebDriverElement时返回WebDriverElement,但在找不到时抛出异常。
要检查元素是否在页面上而不出现异常,诀窍是使用findElementsfindElements返回页面上所有元素的数组。如果没有找到任何东西,则返回一个空数组。

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

字符串

o2gm4chl

o2gm4chl2#

用途:$driver->findElements代替findElement
如果元素不存在,findElements将返回一个空数组,并且不会抛出异常。

ljo96ir5

ljo96ir53#

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

bttbmeg0

bttbmeg04#

那是因为你的xpath不好。
如果您想继续使用xpath,那么您的选择器应该是

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

字符串
如果你有一个开放的心态,习惯CSS选择器。faster and much more readable

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


当然,这是假设ID是image-e4e。xpath失败的原因是xpath试图定位标记名为image-e4e的immedate子进程。你想要解析整个pom,寻找一个属性等于image-e4e的元素。是身份证还是名字我不知道。

i7uaboj4

i7uaboj45#

//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';
}

字符串

58wvjzkj

58wvjzkj6#

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

}

字符串
试试上面的逻辑,我相信一定会成功的。

相关问题