单击具有 href 的选项卡,通过采用文本而不是 xpath 进行行为测试

Click on a tab that has href, by taking text rather than xpath for behat testing

这是我在 FeatureContext 文件中的代码。

public function iClickOnTheText2($arg1)
    {
        $session = $this->getSession();
        $element = $session->getPage()->find('xpath',$session->getSelectorsHandler()->selectorToXpath('xpath', $arg1));
        if (null == $element) {
            throw new InvalidArgumentException(sprintf('Cannot find text: "%s"', $arg1));
        }

        $element->click();
    }

这是我的 behat.yml 文件

default:
  suites:
    default:
      path: %paths.base%/features/bootstrap
      contexts: 
        - FeatureContext
  extensions:
    Behat\MinkExtension:
      base_url: http://somedevwebsite.ca
      sessions:
        default:
          goutte: ~

我的主要目的是单击页面上显示为选项卡选项的文本,以便我可以打开该选项卡。我试图抓住文本,以便我可以单击文本。任何其他方法也将不胜感激,但我尽量不使用 xpath,因为我将不得不复制很多 xpath。但是尝试找到特定文本的 xpath 并将其用于点击是可以的。让我知道这有什么问题,因为我得到的错误是当我的功能包含一个步骤时 When I click on the text "Members" 这是我得到的错误

When I click on the text "Members"                 # FeatureContext::iClickOnTheText2()
      Cannot find text: "Members" (InvalidArgumentException)

谢谢

find()方法可以利用xpath等几种不同的选择器机制,也可以通过HTMLID、元素名称、文本内容、CSS选择器等

find() 方法还有许多快捷方式,例如 findLink(),它简化了常见用例,例如按名称查找 link。

在您的示例中,您可以将 xpath 替换为以下内容:

$element = $session->getPage()->findLink($arg1);

只要 $arg1 是 link 的 html ID、标题或文本内容,它就可以工作,这应该与示例中的 'Membership' 选项卡一起工作。

您可以在 Mink 手册的遍历页面部分找到有关 find() 方法、选择器和快捷方式的更多信息:http://mink.behat.org/en/latest/guides/traversing-pages.html

对于更高级的用法,Drupal Behat Extension 为 Drupal、Behat 和 Drush 提供了许多 out-of-the-box 集成。它还包括常见的 Behat 语句,例如单击 links。在这种情况下,您可以使用 Drupal Behat Extension: When I follow "Membership"