使用Behat / Selenium查找特定DIV中的内容

时间:2014-10-09 20:51:39

标签: php html xpath behat mink

我正在创建一个Behat / Selenium自动化测试脚本。我想创建一个声明:

Given I am on "/"
Then I should see <CONTENT> in <SPECIFIC DIV>

我想在我的FeatureContext.php文件中创建一个函数,该函数允许我验证仅在指定的DIV标记内存在的内容(文本)。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

如果你想指向正确的方向,那么你应该避免做这样的事情 - 它们与Behat意识形态相矛盾。您的方案描述了用户执行的操作以及他作为查看页面的用户验证结果的断言,而不是作为查看代码的开发人员。最后的逻辑必须由你在幕后完成。换句话说,您的步骤应该更像这样:

Given I am on the homepage
Then the page title should read "hello world"
And the user list should contain "john doe"
And the dialogue title should be "foo bar"

如果您想要回答最初的问题,那么您可以这样做:

/**
 * @Then /^(?:|I )should see "(?P<text>.+)" in the "(?P<selector>\w+)" element$/
 */
public function assertElementText($text, $selector) {
    $page    = $this->getSession()->getPage();
    $element = $page->findAll('css', $selector);

    foreach($this->getSession()->getPage()->findAll() as $element) {
        if (strpos(strtolower($text), strtolower($element->getText()) !== false) {
            return;
        }
    }

    throw Exception("Text '{$text}' is not found in the '{$selector}' element.");
}

并像这样使用它:

Then I should see "hello world" in the "div#title" element
Then I should see "john doe" in the "ul#users > li" element