在 PHP 中尝试 switchToIFrame() 时出现“无效参数:'id' 不能是字符串”

问题描述

    public function switchActionScopetoIframe($name)
    {
        $this->getdriver()->switchToIFrame($name);
    }

$this->switchActionScopetoIframe("my-iframe-name");

我也尝试通过 getSession() 来做到这一点。相同的结果。
我也尝试过其他选择器。相同的结果。
由于我的 iframe 是第二个,因此我也尝试像 switchToIFrame(1); 这样的索引。这个没有错误,但是它在 iframe 中找不到任何元素,例如字段。
我还尝试用 javascript 自己重命名 iframe。结果一样。

解决方法

将其添加到 behat.yml 后即可运行

        capabilities:
          extra_capabilities:
            goog:chromeOptions:
              w3c: false
,

对于 Drupal Mink,我添加了这样的功能。

extensions:
    Drupal\MinkExtension:
      goutte: ~
      selenium2:
        wd_host: 'http://selenium:4444/wd/hub'
        browser: 'chrome'
        capabilities:
          ...
          extra_capabilities:
            chromeOptions:
              w3c: false
              ...
,

根据Switch To Frame的规格:

Switch To Frame 命令用于选择 current top-level browsing contextchild browsing contextcurrent browsing context 作为后续命令的 current browsing context

远程步骤是:

  • 让 id 成为从参数参数中获取属性“id”的结果。

  • 如果 id 不为 null、一个 Number 对象或一个表示 Web 元素的对象,则返回错误代码为无效参数的错误。

  • 如果当前浏览上下文不再打开,则返回错误代码为 no such window 的错误。

  • 处理任何用户提示,如果出现错误则返回其值。

  • 运行第一个匹配条件的子步骤,并将 id 表示为 Web 元素:

    • 让 element 成为尝试通过网络元素引用 ID 获取已知元素的结果。
    • 如果元素过时,则返回错误代码为过时元素引用。
    • 如果元素不是框架或 iframe 元素,则返回错误代码没有此类框架。
    • 将当前浏览上下文设置为元素的嵌套浏览上下文。