package net.thucydides.core.pages; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.openqa.selenium.WebElement; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.when; public class WhenNamingHtmlTags { @Mock WebElement unknownElementType; @Mock WebElement button; @Mock WebElement buttonWithValue; @Mock WebElement submitButton; @Mock WebElement link; @Before public void initMocks() { MockitoAnnotations.initMocks(this); mockWebElement(unknownElementType).returnsTagAndText("unknown", "unknown text"); mockWebElement(button).returnsTagTypeAndText("input", "button", "Cancel","submit"); mockWebElement(buttonWithValue).returnsTagTypeAndText("input", "button", "","OK"); mockWebElement(submitButton).returnsTagTypeAndText("input", "submit", "OK",""); mockWebElement(link).returnsTagAndText("a", "Cancel"); } private MockWebElementBuilder mockWebElement(WebElement webElement) { return new MockWebElementBuilder(webElement); } @Test public void should_render_unknown_tag_type_as_the_original_tag() { assertThat(HtmlTag.from(unknownElementType).inHumanReadableForm(), is("unknown 'unknown text'")); } @Test public void should_render_a_button_using_the_contained_text() { assertThat(HtmlTag.from(button).inHumanReadableForm(), is("button: input - submit 'Cancel'")); } @Test public void should_render_a_value_button_using_the_value() { assertThat(HtmlTag.from(buttonWithValue).inHumanReadableForm(), is("button: input - OK")); } @Test public void should_render_a_link_using_the_contained_text() { assertThat(HtmlTag.from(link).inHumanReadableForm(), is("link 'Cancel'")); } @Test public void should_render_a_submit_button_using_the_contained_text() { assertThat(HtmlTag.from(submitButton).inHumanReadableForm(), is("button: input 'OK'")); } private class MockWebElementBuilder { private final WebElement webElement; public MockWebElementBuilder(WebElement webElement) { this.webElement = webElement; } public void returnsTagAndText(String tag, String text) { when(webElement.getTagName()).thenReturn(tag); when(webElement.getText()).thenReturn(text); } public void returnsTagTypeAndText(String tag, String type, String text, String value) { when(webElement.getTagName()).thenReturn(tag); when(webElement.getAttribute("type")).thenReturn(type); when(webElement.getAttribute("value")).thenReturn(value); when(webElement.getText()).thenReturn(text); } } }