@Test
  public void valRead() {
    // given
    SeleniumQueryFunctions seleniumQueryFunctions = createMockSeleniumQueryFunctions();
    SeleniumQueryObject seleniumQueryObject =
        createStubSeleniumQueryObjectWithSeleniumQueryFunctions(seleniumQueryFunctions);

    String configuredValue = "configuredValue";
    given(seleniumQueryFunctions.valRead(seleniumQueryObject)).willReturn(configuredValue);
    // when
    String returnedValue = seleniumQueryObject.val();
    // then
    assertThat(returnedValue, is(configuredValue));
  }
  @Test
  public void valWriteString() {
    // given
    SeleniumQueryFunctions seleniumQueryFunctions = createMockSeleniumQueryFunctions();
    SeleniumQueryObject seleniumQueryObject =
        createStubSeleniumQueryObjectWithSeleniumQueryFunctions(seleniumQueryFunctions);

    String propertyValue = "propertyValue";
    SeleniumQueryObject configuredReturningObject = createDummySeleniumQueryObject();
    given(seleniumQueryFunctions.valWrite(seleniumQueryObject, propertyValue))
        .willReturn(configuredReturningObject);
    // when
    SeleniumQueryObject returnedObject = seleniumQueryObject.val(propertyValue);
    // then
    assertThat(returnedObject, is(configuredReturningObject));
  }
  @Test
  public void propRead() {
    // given
    SeleniumQueryFunctions seleniumQueryFunctions = createMockSeleniumQueryFunctions();
    SeleniumQueryObject seleniumQueryObject =
        createStubSeleniumQueryObjectWithSeleniumQueryFunctions(seleniumQueryFunctions);

    String propertyName = "propertyName";
    String configuredPropertyValue = "propertyValue";
    given(seleniumQueryFunctions.propRead(seleniumQueryObject, propertyName))
        .willReturn(configuredPropertyValue);
    // when
    Object returnedPropertyValue = seleniumQueryObject.prop(propertyName);
    // then
    assertThat((String) returnedPropertyValue, is(configuredPropertyValue));
  }
  @Test
  public void filterFunction() {
    // given
    SeleniumQueryFunctions seleniumQueryFunctions = createMockSeleniumQueryFunctions();
    SeleniumQueryObject seleniumQueryObject =
        createStubSeleniumQueryObjectWithSeleniumQueryFunctions(seleniumQueryFunctions);
    SeleniumQueryObject configuredReturningObject = createDummySeleniumQueryObject();

    Predicate<WebElement> filterFunction = createDummyWebElementPredicate();
    given(seleniumQueryFunctions.filterFunction(seleniumQueryObject, filterFunction))
        .willReturn(configuredReturningObject);
    // when
    SeleniumQueryObject returnedObject = seleniumQueryObject.filter(filterFunction);
    // then
    assertThat(returnedObject, is(configuredReturningObject));
  }