package com.codeborne.selenide.impl;

import com.codeborne.selenide.SelenideElement;
import org.junit.Test;
import org.openqa.selenium.By;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ElementFinderTest {
  @Test
  public void testToString() {
    SelenideElement parent = mock(SelenideElement.class);
    when(parent.toString()).thenReturn("table");
    when(parent.getTagName()).thenReturn("table");

    assertEquals("{By.id: app}", new ElementFinder(null, By.id("app"), 0).toString());
    assertEquals("{By.id: app[3]}", new ElementFinder(null, By.id("app"), 3).toString());
    assertEquals("{By.id: app}", new ElementFinder(parent, By.id("app"), 0).toString());
    assertEquals("{By.id: app[3]}", new ElementFinder(parent, By.id("app"), 3).toString());
  }
}

package com.codeborne.selenide.impl;

import com.codeborne.selenide.SelenideElement;
import org.junit.Test;
import org.openqa.selenium.By;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ElementFinderTest {
  @Test
  public void testToStringForFinderByCssSelectors() {
    SelenideElement parent = mock(SelenideElement.class);
    when(parent.toString()).thenReturn("table");
    when(parent.getTagName()).thenReturn("table");

    assertEquals("{By.id: app}", new ElementFinder(null, By.id("app"), 0).toString());
    assertEquals("{By.id: app[3]}", new ElementFinder(null, By.id("app"), 3).toString());
    assertEquals("{By.id: app}", new ElementFinder(parent, By.id("app"), 0).toString());
    assertEquals("{By.id: app[3]}", new ElementFinder(parent, By.id("app"), 3).toString());
  }

  @Test
  public void testToStringForFinderByXpathExpration() {
    SelenideElement parent = mock(SelenideElement.class);
    when(parent.toString()).thenReturn("table");
    when(parent.getTagName()).thenReturn("table");

    assertEquals("{By.xpath: //*[@id='app']}", new ElementFinder(null, By.xpath("//*[@id='app']"), 0).toString());
    assertEquals("{By.xpath: //*[@id='app'][3]}", new ElementFinder(null, By.xpath("//*[@id='app']"), 3).toString());
    assertEquals("{By.xpath: //*[@id='app']}", new ElementFinder(parent, By.xpath("//*[@id='app']"), 0).toString());
    assertEquals("{By.xpath: //*[@id='app'][3]}", new ElementFinder(parent, By.xpath("//*[@id='app']"), 3).toString());
  }
}

add new test for ElementFinder class with By.xpath search