【问题标题】:Check element exists using PHP Selenium 2 Webdriver?使用 PHP Selenium 2 Webdriver 检查元素是否存在?
【发布时间】:2013-10-30 01:54:58
【问题描述】:

我正在尝试通过 CSS 使用 Selenium 2 检查页面上的元素是否存在。有人有任何使用 PHP Selenium Webdriver Facebook wrapper 的示例吗?

我试过下面的代码:

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

但是给了我这个错误:

致命错误:未捕获的异常“NoSuchElementWebDriverError”与 消息'无法定位元素: {"method":"xpath","selector":"image-e4e"}

【问题讨论】:

    标签: php selenium webdriver selenium-webdriver


    【解决方案1】:

    按照设计,findElement 在找到 WebDriverElement 时返回它,但在未找到时抛出异常。

    要检查元素是否在页面上而不发生异常,诀窍是使用findElementsfindElements 返回页面上所有元素的数组。如果没有找到,则返回一个空数组。

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

    【讨论】:

      【解决方案2】:

      使用:$driver->findElements 而不是 findElement

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

      【讨论】:

        【解决方案3】:

        您也可以在 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 方法会返回一个空列表。

        【讨论】:

          【解决方案4】:

          那是因为你的 xpath 不好。

          如果你想继续使用 xpath,那么你的选择器应该是

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

          如果您心胸开阔,请习惯 CSS 选择器。他们是faster and much more readable

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

          这当然是假设 ID 是image-e4e。您的 xpath 失败的原因是 xpath 试图找到一个标签名为 image-e4e 的直接子代。你想解析整个 pom 中一个属性等于image-e4e 的元素。是ID还是名字,我不知道。

          【讨论】:

          • 它仍然给我未捕获异常的错误。在我测试元素不在页面上时,所以我想检查它是否不存在..如果元素存在我没有收到错误..
          • 我尝试了 WebDriverBy::xpath("//*[@id='image-e4e']")) 和 WebDriverBy::cssSelector("#image-e4e")...任何其他想法..
          • 我在想某种断言函数,但不太确定.. 似乎是一件非常简单的事情......但无法完全弄清楚
          【解决方案5】:
          if($driver->findElement(WebDriverBy::id("image-e4e")) != 0)
          {
          
          }
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-22
            • 2011-12-20
            • 2012-09-29
            • 2020-04-06
            • 2021-03-19
            • 2011-09-25
            • 1970-01-01
            相关资源
            最近更新 更多