package org.fluentlenium.integration; import org.fluentlenium.core.script.FluentJavascript; import org.fluentlenium.integration.localtest.IntegrationFluentTest; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.NoSuchElementException; import java.util.Arrays; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; import static org.fluentlenium.core.filter.FilterConstructor.with; public class JavascriptTest extends IntegrationFluentTest { @Before public void before() { goTo(JAVASCRIPT_URL); setScreenshotMode(TriggerMode.MANUAL); setHtmlDumpMode(TriggerMode.MANUAL); } @Test public void checkTextParam() { assertThat(find("span", with("id").equalTo("default")).first().text()).isEqualTo("unchanged"); assertThat(find("#default").first().text()).isEqualTo("unchanged"); executeScript("change();"); assertThat(find("#default").first().text()).isEqualTo("changed"); } @Test public void shouldExecuteScriptReturnString() { String script = "return 'string';"; FluentJavascript fluentJavascript = executeScript(script); assertThat(fluentJavascript.isBooleanResult()).isFalse(); assertThat(fluentJavascript.isDoubleResult()).isFalse(); assertThat(fluentJavascript.isLongResult()).isFalse(); assertThat(fluentJavascript.isListResult()).isFalse(); assertThat(fluentJavascript.isStringResult()).isTrue(); assertThat((Object) fluentJavascript.getStringResult()).isEqualTo(fluentJavascript.getResult()); assertThat(fluentJavascript.getStringResult()).isEqualTo("string"); } @Test public void shouldExecuteScriptReturnBoolean() { String script = "return true;"; FluentJavascript fluentJavascript = executeScript(script); assertThat(fluentJavascript.isBooleanResult()).isTrue(); assertThat(fluentJavascript.isDoubleResult()).isFalse(); assertThat(fluentJavascript.isLongResult()).isFalse(); assertThat(fluentJavascript.isListResult()).isFalse(); assertThat(fluentJavascript.isStringResult()).isFalse(); assertThat((Object) fluentJavascript.getBooleanResult()).isEqualTo(fluentJavascript.getResult()); assertThat(fluentJavascript.getBooleanResult()).isTrue(); } @Test(expected = NoSuchElementException.class) public void shouldFailFastForNonExistingArguments() { String script = "arguments[0].click()"; executeScript(script, find(".notExistingOne").first().getElement()); } @Test public void shouldExecuteScriptReturnDouble() { String script = "return 12.12;"; FluentJavascript fluentJavascript = executeScript(script); assertThat(fluentJavascript.isBooleanResult()).isFalse(); assertThat(fluentJavascript.isDoubleResult()).isTrue(); assertThat(fluentJavascript.isLongResult()).isFalse(); assertThat(fluentJavascript.isListResult()).isFalse(); assertThat(fluentJavascript.isStringResult()).isFalse(); assertThat((Object) fluentJavascript.getDoubleResult()).isEqualTo(fluentJavascript.getResult()); assertThat(fluentJavascript.getDoubleResult()).isEqualTo(12.12D); } @Test public void shouldExecuteScriptReturnLong() { String script = "return 5;"; FluentJavascript fluentJavascript = executeScript(script); assertThat(fluentJavascript.isBooleanResult()).isFalse(); assertThat(fluentJavascript.isDoubleResult()).isFalse(); assertThat(fluentJavascript.isLongResult()).isTrue(); assertThat(fluentJavascript.isListResult()).isFalse(); assertThat(fluentJavascript.isStringResult()).isFalse(); assertThat((Object) fluentJavascript.getLongResult()).isEqualTo(fluentJavascript.getResult()); assertThat(fluentJavascript.getLongResult()).isEqualTo(5L); } @Test public void shouldExecuteScriptReturnList() { String script = "return Array('string 1', 'string 2', 5, 12.12, true, Array('test 1', 'test 2'));"; FluentJavascript fluentJavascript = executeScript(script); assertThat(fluentJavascript.isBooleanResult()).isFalse(); assertThat(fluentJavascript.isDoubleResult()).isFalse(); assertThat(fluentJavascript.isLongResult()).isFalse(); assertThat(fluentJavascript.isListResult()).isTrue(); assertThat(fluentJavascript.isStringResult()).isFalse(); assertThat((Object) fluentJavascript.getListResult()).isEqualTo(fluentJavascript.getResult()); assertThat(fluentJavascript.getListResult()) .containsExactly("string 1", "string 2", 5L, 12.12D, true, Arrays.asList("test 1", "test 2")); assertThat(fluentJavascript.getListResult()) .containsExactly("string 1", "string 2", 5L, 12.12D, true, Arrays.asList("test 1", "test 2")); } @Test public void shouldExecuteAsyncScriptReturnString() { getDriver().manage().timeouts().setScriptTimeout(200, TimeUnit.MILLISECONDS); long start = System.nanoTime(); FluentJavascript fluentJavascript = executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 100);"); assertThat(System.nanoTime() - start).isGreaterThanOrEqualTo(100000000); assertThat(fluentJavascript.getResult()).isNull(); } }