Sometimes, querying the browser can be expensive. For example, if you are testing tables with large numbers of web elements (e.g. a web element for each cell), performance can be slow, and memory usage high. Normally, Thucydides will requery the page (and create a new Page Object) each time you call Pages.get() or Pages.currentPageAt(). If you are certain that the page will not change (i.e., that you are only performing read-only operations on the page), you can use the onSamePage() method of the ScenarioSteps class to ensure that subsequent calls to Pages.get() or Pages.currentPageAt() will return the same page object:
@RunWith(ThucydidesRunner.class)
public class WhenDisplayingTableContents {
@Managed
public WebDriver webdriver;
@ManagedPages(defaultUrl = "http://my.web.site/index.html")
public Pages pages;
@Steps
public DemoSiteSteps steps;
@Test
public void the_user_opens_another_page() {
steps.navigate_to_page_with_a_large_table();
steps.onSamePage(DemoSiteSteps.class).check_row(1);
steps.onSamePage(DemoSiteSteps.class).check_row(2);
steps.onSamePage(DemoSiteSteps.class).check_row(3);
}
}