簡體   English   中英

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

[英]Check element exists using PHP Selenium 2 Webdriver?

我正在嘗試使用 Selenium 2 通過 CSS 檢查頁面上的元素是否存在。有人有使用 PHP Selenium Webdriver Facebook包裝器的示例嗎?

我試過下面的代碼:

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

但是給了我這個錯誤:

致命錯誤:未捕獲的異常“NoSuchElementWebDriverError”,消息為“無法定位元素:{"method":"xpath","selector":"image-e4e"}

按照設計, findElement如果找到則返回 WebDriverElement,但在未找到時拋出異常。

要檢查元素是否在頁面上而不出現異常,訣竅是使用findElements findElements返回在頁面上找到的所有元素的數組。 如果未找到任何內容,它將返回一個空數組。

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

使用: $driver->findElements driver- $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,那么您的選擇器將是

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

如果您思想開放,請習慣 CSS 選擇器。 它們更快,更具可讀性

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

這當然是假設 ID 是image-e4e 您的 xpath 失敗的原因是因為 xpath 試圖定位帶有標簽名稱image-e4e的即時子image-e4e 您想為具有等於image-e4e的屬性的元素解析整個 pom。 是ID還是名字,我不知道。

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

}

試試上面的邏輯,我相信它肯定會奏效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM