diff --git a/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/DeviceFilterFactoryTest.java b/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/DeviceFilterFactoryTest.java index fc763d05..015aa3b5 100644 --- a/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/DeviceFilterFactoryTest.java +++ b/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/DeviceFilterFactoryTest.java @@ -11,6 +11,7 @@ import com.amazonaws.services.devicefarm.model.ListDevicesResult; import java.util.Collections; import java.util.List; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; @@ -35,9 +36,11 @@ public class DeviceFilterFactoryTest { @Mock private ListDevicesResult resultBusy; + private AutoCloseable mocks; + @BeforeEach public void setUp() { - MockitoAnnotations.initMocks(this); + mocks = MockitoAnnotations.openMocks(this); when(awsService.getAws()).thenReturn(awsDeviceFarm); when(properties.getProperty("platform")).thenReturn("android"); doReturn(resultHighlyAvailable) @@ -59,6 +62,11 @@ public void setUp() { target = new DeviceFilterFactory(properties, awsService); } + @AfterEach + public void finish() throws Exception { + mocks.close(); + } + @Test public void testGetDeviceFilters() { when(resultHighlyAvailable.getDevices()).thenReturn(List.of(new Device().withName("test1"))); diff --git a/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestPackagerTest.java b/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestPackagerTest.java index ee7af570..827b4267 100644 --- a/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestPackagerTest.java +++ b/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestPackagerTest.java @@ -12,6 +12,8 @@ import java.nio.file.Paths; import org.apache.maven.shared.invoker.MavenInvocationException; import org.apache.maven.shared.invoker.PrintStreamHandler; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -25,12 +27,23 @@ public class TestPackagerTest { @Mock private PropertiesHolder properties; + private AutoCloseable mocks; + + @BeforeEach + public void setup() { + mocks = MockitoAnnotations.openMocks(this); + } + + @AfterEach + public void finish() throws Exception { + mocks.close(); + } + @Test public void testMavenPackaging() throws MavenInvocationException, MalformedURLException, IOException, ReflectiveOperationException { String currentPath = Paths.get("").toFile().getAbsolutePath(); - MockitoAnnotations.initMocks(this); when(properties.getProperty("aws.demo.path")).thenReturn(currentPath); when(properties.getProperty("aws.testpackage.name")).thenReturn("justtestlah-awsdevicefarm"); ByteArrayOutputStream logOutput = new ByteArrayOutputStream(); diff --git a/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestSpecFactoryTest.java b/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestSpecFactoryTest.java index 236c83fe..2c98907c 100644 --- a/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestSpecFactoryTest.java +++ b/justtestlah-awsdevicefarm/src/test/java/qa/justtestlah/awsdevicefarm/TestSpecFactoryTest.java @@ -10,6 +10,8 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Properties; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -19,9 +21,20 @@ public class TestSpecFactoryTest { @Mock private PropertiesHolder properties; + private AutoCloseable mocks; + + @BeforeEach + public void setup() { + mocks = MockitoAnnotations.openMocks(this); + } + + @AfterEach + public void finish() throws Exception { + mocks.close(); + } + @Test public void testCreateTestSpec() throws IOException, URISyntaxException { - MockitoAnnotations.initMocks(this); when(properties.getProperties()).thenReturn(new Properties()); List expected = diff --git a/justtestlah-core/src/main/java/io/cucumber/junit/JustTestLahRunner.java b/justtestlah-core/src/main/java/io/cucumber/junit/JustTestLahRunner.java index 630150c0..f31a90aa 100644 --- a/justtestlah-core/src/main/java/io/cucumber/junit/JustTestLahRunner.java +++ b/justtestlah-core/src/main/java/io/cucumber/junit/JustTestLahRunner.java @@ -31,7 +31,6 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.time.Clock; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -55,8 +54,13 @@ /** * Custom JUnit runner to dynamically set Cucumber options. Based on {@link * io.cucumber.junit.Cucumber}. + * + *

There are two reasons for this class: 1. setting Cucumber options at runtime and 2. running + * AWS Devicefarm tests as JUnit tests on the client side. 1. might no longer be necessary with the + * latest Cucumber version. If so, we should likely use a separate runner class for the AWS + * use-case. */ -public class JustTestLahRunner extends ParentRunner> { +public final class JustTestLahRunner extends ParentRunner> { private static final String CLOUDPROVIDER_AWS = "aws"; private static final String CLOUDPROVIDER_LOCAL = "local"; @@ -65,18 +69,17 @@ public class JustTestLahRunner extends ParentRunner> { private static final Logger LOG = LoggerFactory.getLogger(JustTestLahRunner.class); - private List> children = new ArrayList<>(); - private List features = new ArrayList<>(); - private Plugins plugins = null; - private EventBus bus = null; - private PropertiesHolder properties = new PropertiesHolder(); + private List> children; + private EventBus bus; + private List features; + private Plugins plugins; + private CucumberExecutionContext context; private boolean multiThreadingAssumed = false; - private CucumberExecutionContext context = null; + private PropertiesHolder properties = new PropertiesHolder(); private static final String CLOUD_PROVIDER = "cloudprovider"; private static final String PLATFORM_KEY = "platform"; private static final String SPRING_PROFILES_ACTIVE = "spring.profiles.active"; - private Runner awsRunner; /** @@ -96,7 +99,9 @@ public JustTestLahRunner(Class clazz) throws InitializationError, IOException bridgeLogging(); if (properties.getProperty(CLOUD_PROVIDER, CLOUDPROVIDER_LOCAL).equals(CLOUDPROVIDER_AWS)) { + CucumberOptionsBuilder.setCucumberOptions(properties); LOG.info("Using qa.justtestlah.awsdevicefarm.AWSTestRunner"); + initCucumber(clazz); awsRunner = getAWSRunner(clazz); } else { CucumberOptionsBuilder.setCucumberOptions(properties); @@ -107,8 +112,10 @@ public JustTestLahRunner(Class clazz) throws InitializationError, IOException /** * This is the code taken from {@link io.cucumber.junit.Cucumber} * - * @param clazz {@link Class} - * @throws InitializationError {@link InitializationError} + *

Constructor called by JUnit. + * + * @param clazz the class with the @RunWith annotation. + * @throws org.junit.runners.model.InitializationError if there is another problem */ private void initCucumber(Class clazz) throws InitializationError { Assertions.assertNoCucumberAnnotatedMethods(clazz); @@ -168,7 +175,7 @@ private void initCucumber(Class clazz) throws InitializationError { this.plugins.addPlugin(exitStatus); ObjectFactoryServiceLoader objectFactoryServiceLoader = - new ObjectFactoryServiceLoader(runtimeOptions); + new ObjectFactoryServiceLoader(classLoader, runtimeOptions); ObjectFactorySupplier objectFactorySupplier = new ThreadLocalObjectFactorySupplier(objectFactoryServiceLoader); BackendSupplier backendSupplier = @@ -197,7 +204,6 @@ private void initCucumber(Class clazz) throws InitializationError { }) .filter(runner -> !runner.isEmpty()) .collect(toList()); - LOG.info( "Found {} feature(s) in {}: {}", features.size(), @@ -259,6 +265,36 @@ public void evaluate() throws Throwable { } } + /** this method uses reflection to avoid a compile-time dependency on justtestlah-awsdevicefarm */ + private Runner getAWSRunner(Class clazz) { + try { + return (Runner) + Class.forName("qa.justtestlah.awsdevicefarm.AWSTestRunner") + .getConstructor(Class.class) + .newInstance(clazz); + } catch (InstantiationException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException + | NoSuchMethodException + | SecurityException + | ClassNotFoundException exception) { + LOG.error( + "Unable to create an instance of qa.justtestlah.awsdevicefarm.AWSTestRunner. Ensure justtestlah-aws is on your classpath (check your Maven pom.xml).", + exception); + } + return null; + } + + @Override + public void run(RunNotifier notifier) { + if (properties.getProperty(CLOUD_PROVIDER, CLOUDPROVIDER_LOCAL).equals(CLOUDPROVIDER_AWS)) { + awsRunner.run(notifier); + } else { + super.run(notifier); + } + } + private void bridgeLogging() { SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); @@ -294,34 +330,4 @@ public Description getDescription() { return super.getDescription(); } } - - /** this method uses reflection to avoid a compile-time dependency on justtestlah-awsdevicefarm */ - private Runner getAWSRunner(Class clazz) { - try { - return (Runner) - Class.forName("qa.justtestlah.awsdevicefarm.AWSTestRunner") - .getConstructor(Class.class) - .newInstance(clazz); - } catch (InstantiationException - | IllegalAccessException - | IllegalArgumentException - | InvocationTargetException - | NoSuchMethodException - | SecurityException - | ClassNotFoundException exception) { - LOG.error( - "Unable to create an instance of qa.justtestlah.awsdevicefarm.AWSTestRunner. Ensure justtestlah-aws is on your classpath (check your Maven pom.xml).", - exception); - } - return null; - } - - @Override - public void run(RunNotifier notifier) { - if (properties.getProperty(CLOUD_PROVIDER, CLOUDPROVIDER_LOCAL).equals(CLOUDPROVIDER_AWS)) { - awsRunner.run(notifier); - } else { - super.run(notifier); - } - } } diff --git a/justtestlah-core/src/main/java/qa/justtestlah/base/Base.java b/justtestlah-core/src/main/java/qa/justtestlah/base/Base.java index d779307c..b61ee4b8 100644 --- a/justtestlah-core/src/main/java/qa/justtestlah/base/Base.java +++ b/justtestlah-core/src/main/java/qa/justtestlah/base/Base.java @@ -23,12 +23,13 @@ public class Base implements ApplicationContextAware, InitializingBean { public void afterPropertiesSet() { initPages(); } + /** - * inject the page objects (without using @org.springframework.beans.factory.annotation.Autowired - * annotations) + * Recursively inject the page objects (without + * using @org.springframework.beans.factory.annotation.Autowired annotations) */ @SuppressWarnings("squid:S3011") - public void initPages() { + public synchronized void initPages() { LOG.info("Initializing page objects for class {}", this.getClass()); Class clazz = this.getClass(); while (clazz != Base.class) { @@ -37,9 +38,20 @@ public void initPages() { field.setAccessible(true); try { LOG.debug("Loading page object {} of type {}", field.getName(), field.getType()); - field.set(this, applicationContext.getBean(field.getType())); + Object bean = applicationContext.getBean(field.getType()); + if (bean != null) { + field.set(this, bean); + ((Base) bean).initPages(); + } else { + LOG.error( + "Couldn't inject non-existing page {} into {}. Skipping!", + field.getType().getSimpleName(), + this.getClass().getSimpleName()); + } } catch (BeansException | IllegalArgumentException | IllegalAccessException exception) { - LOG.error("Error initializing page objects for class {}", this.getClass()); + LOG.error( + String.format("Error initializing page objects for class %s", this.getClass()), + exception); LOG.error("Exception", exception); } } diff --git a/justtestlah-core/src/main/java/qa/justtestlah/base/BasePage.java b/justtestlah-core/src/main/java/qa/justtestlah/base/BasePage.java index 5f7c79f6..2241be1a 100644 --- a/justtestlah-core/src/main/java/qa/justtestlah/base/BasePage.java +++ b/justtestlah-core/src/main/java/qa/justtestlah/base/BasePage.java @@ -10,6 +10,7 @@ import io.appium.java_client.HasSettings; import io.appium.java_client.Setting; import java.io.File; +import java.time.Duration; import org.apache.commons.lang3.tuple.Pair; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; @@ -217,8 +218,8 @@ public T verify() { * *

Performs Galen checks, if enabled. * - * @param timeout the timeout for identifying the first element. Note, that there is no timeout - * for any subsequent checks! + * @param timeout the timeout in milliseconds for identifying the first element. Note, that there + * is no timeout for any subsequent checks! * @return this page object */ @SuppressWarnings("unchecked") @@ -241,9 +242,9 @@ public T verify(int timeout) { try { // only use the timeout for the first check if (initialCheck) { - $(identifier).waitUntil(appear, timeout).isDisplayed(); + $(identifier).shouldBe(appear, Duration.ofMillis(timeout)).isDisplayed(); } else { - $(identifier).waitUntil(appear, 0).isDisplayed(); + $(identifier).shouldBe(appear, Duration.ZERO).isDisplayed(); } initialCheck = false; } catch (ElementNotFound exception) { diff --git a/justtestlah-core/src/main/java/qa/justtestlah/configuration/CucumberOptionsBuilder.java b/justtestlah-core/src/main/java/qa/justtestlah/configuration/CucumberOptionsBuilder.java index 9ab06733..9bc420f0 100644 --- a/justtestlah-core/src/main/java/qa/justtestlah/configuration/CucumberOptionsBuilder.java +++ b/justtestlah-core/src/main/java/qa/justtestlah/configuration/CucumberOptionsBuilder.java @@ -13,9 +13,7 @@ public class CucumberOptionsBuilder { private static final String PLATFORM_KEY = "platform"; private static final String FEATURES_DIRECTORY_KEY = "features.directory"; - private static final String CUCUMBER_REPORT_DIRECTORY_KEY = "cucumber.report.directory"; private static final String JUSTTESTLAH_SPRING_CONTEXT_KEY = "justtestlah.use.springcontext"; - private static final String DEFAULT_CUCUMBER_REPORT_DIRECTORY = "target/report/cucumber"; private static final String DEFAULT_PLATFORM = "web"; private static final String DELIMITER = ","; private static final String TAGS_KEY = "tags"; diff --git a/justtestlah-core/src/main/java/qa/justtestlah/log/CucumberLoggingPlugin.java b/justtestlah-core/src/main/java/qa/justtestlah/log/CucumberLoggingPlugin.java index 9c0bc51d..cd17df81 100644 --- a/justtestlah-core/src/main/java/qa/justtestlah/log/CucumberLoggingPlugin.java +++ b/justtestlah-core/src/main/java/qa/justtestlah/log/CucumberLoggingPlugin.java @@ -28,6 +28,9 @@ public void receive(TestCaseStarted event) { "Scenario: {} ({}:{})", testCase.getName(), testCase.getUri(), + // TODO: getLine() has been deprecated. Once this gets removed from Cucumber, we + // will + // simply drop it from the log too testCase.getLine()); } }; @@ -66,6 +69,10 @@ public void receive(TestCaseFinished event) { event.getTestCase().getName(), result.getDuration().toSeconds()); } else { + String errorMsg = error.getMessage(); + if (errorMsg != null) { + errorMsg = errorMsg.replaceAll("[\\t\\n\\r]+", " "); + } SpringContext.getBean(TestLogWriter.class) .log( LogLevel.INFO, @@ -74,7 +81,7 @@ public void receive(TestCaseFinished event) { result.getStatus(), event.getTestCase().getName(), result.getDuration().toSeconds(), - error.getMessage().replaceAll("[\\t\\n\\r]+", " ")); + errorMsg); } } }; diff --git a/justtestlah-core/src/main/java/qa/justtestlah/testdata/TestDataMap.java b/justtestlah-core/src/main/java/qa/justtestlah/testdata/TestDataMap.java index 759cffd7..76933df8 100644 --- a/justtestlah-core/src/main/java/qa/justtestlah/testdata/TestDataMap.java +++ b/justtestlah-core/src/main/java/qa/justtestlah/testdata/TestDataMap.java @@ -93,7 +93,7 @@ private void initializeTestDataObjectRegistry() { LOG.info("Scanning classpath for test data classes"); ClassGraph classGraph = new ClassGraph().enableAnnotationInfo(); if (modelPackage != null && !modelPackage.isEmpty()) { - classGraph = classGraph.whitelistPackages(modelPackage); + classGraph = classGraph.acceptPackages(modelPackage); } try (ScanResult scanResult = classGraph.scan()) { for (ClassInfo routeClassInfo : @@ -112,7 +112,12 @@ private void initializeTestDataObjectRegistry() { } public T get(Class type, String name) { - return (T) testData.get(type).get(name); + try { + return (T) testData.get(type).get(name); + } catch (NullPointerException e) { + throw new RuntimeException( + String.format("Error fetching test data. Test data map: %s", testData), e); + } } public T get(Class type) { diff --git a/justtestlah-core/src/test/java/qa/justtestlah/base/BaseTest.java b/justtestlah-core/src/test/java/qa/justtestlah/base/BaseTest.java index fdc0c069..caf5a9c0 100644 --- a/justtestlah-core/src/test/java/qa/justtestlah/base/BaseTest.java +++ b/justtestlah-core/src/test/java/qa/justtestlah/base/BaseTest.java @@ -4,6 +4,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -16,15 +17,22 @@ public class BaseTest { @Mock private ApplicationContext applicationContext; + private AutoCloseable mocks; + /** Initialise mocks. */ @Before @SuppressWarnings("unchecked") public void init() { - MockitoAnnotations.initMocks(this); + mocks = MockitoAnnotations.openMocks(this); // mocking the Spring application context doReturn(new TestPageObject()).when(applicationContext).getBean(any(Class.class)); } + @After + public void finish() throws Exception { + mocks.close(); + } + /** Test the injection of page objects . */ @Test public void testInjection() { diff --git a/justtestlah-demos/pom.xml b/justtestlah-demos/pom.xml index a492d483..5d6b8aa8 100644 --- a/justtestlah-demos/pom.xml +++ b/justtestlah-demos/pom.xml @@ -9,7 +9,7 @@ qa.justtestlah justtestlah-parent - 1.9-RC4 + 1.10-SNAPSHOT diff --git a/justtestlah-demos/src/test/java/qa/justtestlah/examples/google/pages/ResultsPage.java b/justtestlah-demos/src/test/java/qa/justtestlah/examples/google/pages/ResultsPage.java index 5a93a759..79cac08c 100644 --- a/justtestlah-demos/src/test/java/qa/justtestlah/examples/google/pages/ResultsPage.java +++ b/justtestlah-demos/src/test/java/qa/justtestlah/examples/google/pages/ResultsPage.java @@ -1,17 +1,13 @@ package qa.justtestlah.examples.google.pages; import static qa.justtestlah.configuration.Platform.Constants.WEB; - -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; import qa.justtestlah.annotations.ScreenIdentifier; import qa.justtestlah.base.BasePage; -import qa.justtestlah.examples.google.model.Search; -import qa.justtestlah.visual.OCR; @Component @Profile(WEB) -@ScreenIdentifier({"SEARCH_RESULT", "RESULT_STATS"}) +@ScreenIdentifier({"RESULT_STATS"}) public class ResultsPage extends BasePage { } diff --git a/justtestlah-demos/src/test/resources/features/google/Google.feature b/justtestlah-demos/src/test/resources/features/google/Google.feature index 8bb2f822..c5e2b4d6 100644 --- a/justtestlah-demos/src/test/resources/features/google/Google.feature +++ b/justtestlah-demos/src/test/resources/features/google/Google.feature @@ -3,9 +3,9 @@ Feature: Google search @web @integration Scenario: Search Given I am on the homepage - Then I can see the Google logo + #Then I can see the Google logo When I search for "default" Then I can see search results - When I click on the Google logo - Then I am on the homepage - And I can see the Google logo + #When I click on the Google logo + #Then I am on the homepage + #And I can see the Google logo diff --git a/justtestlah-demos/src/test/resources/features/google/More search queries.feature b/justtestlah-demos/src/test/resources/features/google/More search queries.feature new file mode 100644 index 00000000..e780c5c9 --- /dev/null +++ b/justtestlah-demos/src/test/resources/features/google/More search queries.feature @@ -0,0 +1,7 @@ +Feature: Google search + +#@web @integration +Scenario: Search for Selenium + Given I am on the homepage + When I search for "selenium" + Then I can see search results diff --git a/justtestlah-demos/src/test/resources/features/google/Search queries.feature b/justtestlah-demos/src/test/resources/features/google/Search queries.feature new file mode 100644 index 00000000..c6848a44 --- /dev/null +++ b/justtestlah-demos/src/test/resources/features/google/Search queries.feature @@ -0,0 +1,7 @@ +Feature: Google search + +@web @integration +Scenario: Search for Cucumber + Given I am on the homepage + When I search for "cucumber" + Then I can see search results diff --git a/justtestlah-demos/src/test/resources/justtestlah.properties b/justtestlah-demos/src/test/resources/justtestlah.properties index 7ce5b00c..999bd71f 100644 --- a/justtestlah-demos/src/test/resources/justtestlah.properties +++ b/justtestlah-demos/src/test/resources/justtestlah.properties @@ -4,10 +4,12 @@ # GENERAL settings platform=web -pages.package=qa.justtestlah.examples.stackoverflow.pages -steps.package=qa.justtestlah.examples.stackoverflow.steps -model.package=qa.justtestlah.examples.stackoverflow.model -features.directory=src/test/resources/features/stackoverflow +pages.package=qa.justtestlah.examples.google.pages +steps.package=qa.justtestlah.examples.google.steps +model.package=qa.justtestlah.examples.google.model +testdata.enabled=true +testdata.filter=google/testdata +features.directory=src/test/resources/features/google cucumber.report.directory=target/report/cucumber cloudprovider=local @@ -21,7 +23,7 @@ eyes.apiKey= # WEB settings -web.baseUrl=https://www.stackoverflow.com +web.baseUrl=https://www.google.com web.browser=chrome web.headless=false diff --git a/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/appium.yaml b/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/appium.yaml new file mode 100644 index 00000000..cfd94a30 --- /dev/null +++ b/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/appium.yaml @@ -0,0 +1,3 @@ +search: + searchTerm: appium + diff --git a/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/cucumber.yaml b/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/cucumber.yaml new file mode 100644 index 00000000..1ffba713 --- /dev/null +++ b/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/cucumber.yaml @@ -0,0 +1,3 @@ +search: + searchTerm: cucumber + diff --git a/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/selenium.yaml b/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/selenium.yaml new file mode 100644 index 00000000..8b4e9af7 --- /dev/null +++ b/justtestlah-demos/src/test/resources/qa/justtestlah/examples/google/testdata/search/selenium.yaml @@ -0,0 +1,3 @@ +search: + searchTerm: selenium +