简体   繁体   中英

How can I compare the multiline parameter in SpecFlow?

I have a feature file with step

Then I must see the specific text 'Lorem ipsum.\r\nLorem ipsum, lorem ipsum - lorem ipsum\r\nLorem ipsum.' in the text .error-message block on the page

And step definition

    [Then(@"I must see the specific text '(.*)' in the text (.*) block on the page")]
    public void ThenISeeTheSpecificTextOnThePage(string expectedText, string textBlockName)
    {
        var actualText = driver.FindElement(By.CssSelector(textBlockName)).Text;
        ///var removeCaret = actualText.Replace(Environment.NewLine, string.Empty);
        Assert.Contains(expectedText, actualText);
    }

Every time I run this step in debug I see the output

> Assert.Contains() Failure
Not found: Lorem ipsum. Lorem ipsum, Lorem ipsum
In value:  Lorem ipsum.
Lorem ipsum, Lorem ipsum
Lorem ipsum

I know that I can trim \r\n and adapt my input parameter in the feature file. But this would be a hack, which I don't want to do. Is there any chance to assert multiline text?

You can use Doc Strings for specifying your string parameter:

Then I must see the specific text in the .error-message block on the page:
    """
    Lorem ipsum.
    Lorem ipsum, lorem ipsum - lorem ipsum
    Lorem ipsum.
    """

And using the following step definition:

[Then(@"I must see the specific text in the (.*) block on the page:")]
public ThenIMustSeeTheSpecificTextInTheBlockOnThePage(string textBlockName, string expectedText)
{
    var actualText = driver.FindElement(By.CssSelector(textBlockName)).Text;

    Assert.Contains(expectedText, actualText);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM