[英]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.