Take into account the comment message when looking for it

Instead of checking that the list contains one comment it is now checked
that a comment with certain message is visible. This makes the step (and
the locator) more reusable in future tests and also simplifies the code.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
Daniel Calviño Sánchez 2018-02-15 17:30:51 +01:00
parent d9e66b2114
commit 5fd7de5275
2 changed files with 17 additions and 24 deletions

View File

@ -5,4 +5,4 @@ Feature: app-comments
And I open the details view for "welcome.txt"
And I open the "Comments" tab in the details view
When I create a new comment with "Hello world" as message
Then I see that a comment was added
Then I see a comment with "Hello world" as message

View File

@ -47,10 +47,19 @@ class CommentsAppContext implements Context, ActorAwareInterface {
/**
* @return Locator
*/
public static function commentFields() {
return Locator::forThe()->css(".comments .comment .message")->
public static function commentList() {
return Locator::forThe()->css("ul.comments")->
descendantOf(FilesAppContext::currentSectionDetailsView())->
describedAs("Comment fields in current section details view in Files app");
describedAs("Comment list in current section details view in Files app");
}
/**
* @return Locator
*/
public static function commentWithText($text) {
return Locator::forThe()->xpath("//div[normalize-space() = '$text']/ancestor::li")->
descendantOf(self::commentList())->
describedAs("Comment with text \"$text\" in current section details view in Files app");
}
/**
@ -62,26 +71,10 @@ class CommentsAppContext implements Context, ActorAwareInterface {
}
/**
* @Then /^I see that a comment was added$/
* @Then /^I see a comment with "([^"]*)" as message$/
*/
public function iSeeThatACommentWasAdded() {
$self = $this;
$result = Utils::waitFor(function () use ($self) {
return $self->isCommentAdded();
}, 5, 0.5);
PHPUnit_Framework_Assert::assertTrue($result);
}
public function isCommentAdded() {
try {
$locator = self::commentFields();
$comments = $this->actor->getSession()->getPage()->findAll($locator->getSelector(), $locator->getLocator());
PHPUnit_Framework_Assert::assertSame(1, count($comments));
} catch (PHPUnit_Framework_ExpectationFailedException $e) {
return false;
}
return true;
public function iSeeACommentWithAsMessage($commentText) {
PHPUnit_Framework_Assert::assertTrue(
$this->actor->find(self::commentWithText($commentText), 10)->isVisible());
}
}