How to use setExcludedTags method of com.galenframework.actions.GalenActionMutateArguments class

Best Galen code snippet using com.galenframework.actions.GalenActionMutateArguments.setExcludedTags

Source:ArgumentParserTest.java Github

copy

Full Screen

...64 .setHtmlReport("some.html")65 .setTestngReport("testng.xml")66 .setJsonReport("json-reports")67 .setIncludedTags(EMPTY_TAGS)68 .setExcludedTags(EMPTY_TAGS)},69 {args("test", "mysuite",70 "--groups", "mobile,tablet,homepage"),71 new GalenActionTestArguments()72 .setPaths(asList("mysuite"))73 .setGroups(asList("mobile", "tablet", "homepage"))74 .setRecursive(false)75 .setIncludedTags(EMPTY_TAGS)76 .setExcludedTags(EMPTY_TAGS)},77 {args("test", "mysuite",78 "--excluded-groups", "mobile,tablet,homepage"),79 new GalenActionTestArguments()80 .setPaths(asList("mysuite"))81 .setExcludedGroups(asList("mobile", "tablet", "homepage"))82 .setRecursive(false)83 .setIncludedTags(EMPTY_TAGS)84 .setExcludedTags(EMPTY_TAGS)},85 {args("test", "mysuite",86 "--htmlreport", "some.html",87 "--testngreport", "testng.xml"),88 new GalenActionTestArguments()89 .setPaths(asList("mysuite"))90 .setRecursive(false)91 .setHtmlReport("some.html")92 .setTestngReport("testng.xml")93 .setIncludedTags(EMPTY_TAGS)94 .setExcludedTags(EMPTY_TAGS)},95 96 {args("test", "mysuite", 97 "--htmlreport", "some.html",98 "--testngreport", "testng.xml",99 "--parallel-suites", "4"), 100 new GalenActionTestArguments()101 .setPaths(asList("mysuite"))102 .setRecursive(false)103 .setHtmlReport("some.html")104 .setTestngReport("testng.xml")105 .setIncludedTags(EMPTY_TAGS)106 .setExcludedTags(EMPTY_TAGS)107 .setParallelThreads(4)},108 109 {args("test", "mysuite", "mysuite2", 110 "--recursive", 111 "--htmlreport", "some.html",112 "--testngreport", "testng.xml"), 113 new GalenActionTestArguments()114 .setPaths(asList("mysuite", "mysuite2"))115 .setRecursive(true)116 .setHtmlReport("some.html")117 .setTestngReport("testng.xml")118 .setIncludedTags(EMPTY_TAGS)119 .setExcludedTags(EMPTY_TAGS)},120 121 {args("test", "mysuite", "mysuite2", 122 "--filter", "Some Test *"), 123 new GalenActionTestArguments()124 .setPaths(asList("mysuite", "mysuite2"))125 .setRecursive(false)126 .setFilter("Some Test *")127 .setIncludedTags(EMPTY_TAGS)128 .setExcludedTags(EMPTY_TAGS)},129 {args("test", "mysuite", "mysuite2", "--parallel-tests", "3"),130 new GalenActionTestArguments()131 .setPaths(asList("mysuite", "mysuite2"))132 .setRecursive(false)133 .setParallelThreads(3)134 .setIncludedTags(EMPTY_TAGS)135 .setExcludedTags(EMPTY_TAGS)},136 {args("test", "mysuite", "mysuite2", "--config", "/some/config"),137 new GalenActionTestArguments()138 .setPaths(asList("mysuite", "mysuite2"))139 .setRecursive(false)140 .setIncludedTags(EMPTY_TAGS)141 .setExcludedTags(EMPTY_TAGS)142 .setConfig("/some/config")143 },144 };145 }146 @Test(dataProvider = "goodSamples_simpleActions")147 public void shouldParse_simpleActions(String firstArg, Class<?>expectedType) {148 GalenAction action = GalenAction.create(firstArg, new String[]{}, System.out, System.err, NO_LISTENER);149 assertThat(action, is(instanceOf(expectedType)));150 }151 @DataProvider152 public Object[][] goodSamples_simpleActions() {153 return new Object[][] {154 {"config", GalenActionConfig.class},155 {"help", GalenActionHelp.class},156 {"-h", GalenActionHelp.class},157 {"--help", GalenActionHelp.class},158 {"version", GalenActionVersion.class},159 {"-v", GalenActionVersion.class},160 {"--version", GalenActionVersion.class}161 };162 }163 @Test164 public void shouldParse_dumpAction() {165 GalenActionDump action = (GalenActionDump) GalenAction.create("dump",166 new String[]{"my-page.gspec", "--url", "http://mindengine.net", "--export", "export-page-dir", "--max-width", "100", "--max-height", "150"},167 System.out, System.err, NO_LISTENER);168 assertThat(action.getDumpArguments(), is(new GalenActionDumpArguments()169 .setPaths(asList("my-page.gspec"))170 .setUrl("http://mindengine.net")171 .setExport("export-page-dir")172 .setMaxWidth(100)173 .setMaxHeight(150)));174 }175 @Test176 public void shouldParse_dumpAction_withConfig() {177 GalenActionDump action = (GalenActionDump) GalenAction.create("dump",178 new String[]{"my-page.gspec",179 "--url", "http://mindengine.net",180 "--export", "export-page-dir",181 "--max-width", "100",182 "--max-height", "150",183 "--config", "/some/config"184 },185 System.out, System.err, NO_LISTENER);186 assertThat(action.getDumpArguments(), is(new GalenActionDumpArguments()187 .setPaths(asList("my-page.gspec"))188 .setUrl("http://mindengine.net")189 .setExport("export-page-dir")190 .setMaxWidth(100)191 .setMaxHeight(150)192 .setConfig("/some/config")193 ));194 }195 @Test196 public void should_parse_generate_action() {197 GalenActionGenerate action = (GalenActionGenerate) GalenAction.create("generate",198 new String []{199 "path/to/some/page-dump.json",200 "--export", "destination.gspec"201 },202 System.out, System.err, NO_LISTENER203 );204 assertThat(action.getGenerateArguments(), is(new GalenActionGenerateArguments()205 .setPath("path/to/some/page-dump.json")206 .setExport("destination.gspec")207 ));208 }209 @Test210 public void should_parse_generate_action_with_galenextras_disabled() {211 GalenActionGenerate action = (GalenActionGenerate) GalenAction.create("generate",212 new String []{213 "path/to/some/page-dump.json",214 "--export", "destination.gspec",215 "--no-galen-extras"216 },217 System.out, System.err, NO_LISTENER218 );219 assertThat(action.getGenerateArguments(), is(new GalenActionGenerateArguments()220 .setPath("path/to/some/page-dump.json")221 .setExport("destination.gspec")222 .setUseGalenExtras(false)223 ));224 }225 @Test(dataProvider = "goodSamples_checkAction")226 public void shouldParse_checkActionArguments(SimpleArguments args, GalenActionCheckArguments expectedArguments) {227 String actionName = args.args[0];228 String[] arguments = ArrayUtils.subarray(args.args, 1, args.args.length);229 GalenActionCheck action = (GalenActionCheck) GalenAction.create(actionName, arguments, System.out, System.err, NO_LISTENER);230 assertThat(action.getCheckArguments(), is(expectedArguments));231 }232 @DataProvider233 public Object[][] goodSamples_checkAction() {234 return new Object[][]{235 {args("check", "some.spec",236 "--url", "http://mindengine.net",237 "--javascript", "some.js",238 "--include", "mobile,all",239 "--exclude", "nomobile,testTag",240 "--size", "400x700",241 "--htmlreport", "some.html",242 "--testngreport", "testng.xml",243 "--junitreport", "junit.xml"),244 new GalenActionCheckArguments()245 .setUrl("http://mindengine.net")246 .setJavascript("some.js")247 .setIncludedTags(asList("mobile", "all"))248 .setExcludedTags(asList("nomobile", "testTag"))249 .setScreenSize(new Dimension(400, 700))250 .setPaths(asList("some.spec"))251 .setHtmlReport("some.html")252 .setTestngReport("testng.xml")253 .setJunitReport("junit.xml")254 },255 {args("check", "some.spec",256 "--url", "http://mindengine.net",257 "--include", "mobile,all",258 "--exclude", "nomobile,testTag",259 "--size", "400x700",260 "--htmlreport", "some.html"),261 new GalenActionCheckArguments()262 .setUrl("http://mindengine.net")263 .setIncludedTags(asList("mobile", "all"))264 .setExcludedTags(asList("nomobile", "testTag"))265 .setScreenSize(new Dimension(400, 700))266 .setPaths(asList("some.spec"))267 .setHtmlReport("some.html")268 },269 {args("check", "some1.spec", "some2.spec", "--url", "http://mindengine.net"),270 new GalenActionCheckArguments()271 .setUrl("http://mindengine.net")272 .setPaths(asList("some1.spec", "some2.spec"))273 },274 {args("check", "some1.spec", "some2.spec", "--url", "http://mindengine.net", "--config", "/some/config"),275 new GalenActionCheckArguments()276 .setUrl("http://mindengine.net")277 .setPaths(asList("some1.spec", "some2.spec"))278 .setConfig("/some/config")...

Full Screen

Full Screen

Source:GalenActionMutateArguments.java Github

copy

Full Screen

...68 arguments.setJsonReport(cmd.getOptionValue("j"));69 arguments.setTestngReport(cmd.getOptionValue("g"));70 arguments.setJunitReport(cmd.getOptionValue("x"));71 arguments.setIncludedTags(convertTags(cmd.getOptionValue("i")));72 arguments.setExcludedTags(convertTags(cmd.getOptionValue("e")));73 arguments.setPaths(asList(cmd.getArgs()));74 arguments.setConfig(cmd.getOptionValue("c"));75 arguments.getMutationOptions().setPositionOffset(Integer.parseInt(cmd.getOptionValue("o", "5")));76 if (arguments.getPaths().isEmpty()) {77 throw new IllegalArgumentException("Missing spec files");78 }79 return arguments;80 }81 public List<String> getPaths() {82 return paths;83 }84 public GalenActionMutateArguments setPaths(List<String> paths) {85 this.paths = paths;86 return this;87 }88 public List<String> getIncludedTags() {89 return includedTags;90 }91 public GalenActionMutateArguments setIncludedTags(List<String> includedTags) {92 this.includedTags = includedTags;93 return this;94 }95 public List<String> getExcludedTags() {96 return excludedTags;97 }98 public GalenActionMutateArguments setExcludedTags(List<String> excludedTags) {99 this.excludedTags = excludedTags;100 return this;101 }102 public String getUrl() {103 return url;104 }105 public GalenActionMutateArguments setUrl(String url) {106 this.url = url;107 return this;108 }109 public Dimension getScreenSize() {110 return screenSize;111 }112 public GalenActionMutateArguments setScreenSize(Dimension screenSize) {...

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1import com.galenframework.actions.GalenActionMutateArguments;2import com.galenframework.api.Galen;3import com.galenframework.reports.model.LayoutReport;4import com.galenframework.specs.page.PageSpec;5import org.openqa.selenium.WebDriver;6import org.openqa.selenium.chrome.ChromeDriver;7import java.io.File;8import java.io.IOException;9import java.util.Arrays;10import java.util.List;11public class GalenMutateArguments {12public static void main(String[] args) throws IOException {13System.setProperty("webdriver.chrome.driver", "C:\\Users\\user\\Desktop\\chromedriver.exe");14WebDriver driver = new ChromeDriver();15PageSpec pageSpec = Galen.loadSpec(new File("C:\\Users\\user\\Desktop\\galen\\specs\\page.spec"));16List<String> excludedTags = Arrays.asList("mobile", "tablet");17LayoutReport layoutReport = Galen.checkLayout(driver, pageSpec, Arrays.asList("desktop"), new GalenActionMutateArguments().setExcludedTags(excludedTags));18System.out.println(layoutReport.errors());19driver.close();20}21}

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.java.sample.tests;2import com.galenframework.java.sample.components.GalenTestBase;3import com.galenframework.reports.TestReport;4import com.galenframework.reports.model.LayoutReport;5import com.galenframework.reports.model.LayoutReportBuilder;6import com.galenframework.specs.page.PageSpec;7import com.galenframework.suite.GalenTestInfo;8import org.openqa.selenium.By;9import org.openqa.selenium.WebDriver;10import org.openqa.selenium.WebElement;11import java.io.IOException;12import java.util.LinkedList;13import java.util.List;14import static java.util.Arrays.asList;15public class GalenTest extends GalenTestBase {16 public List<GalenTestInfo> getTests() {17 GalenTestInfo test = GalenTestInfo.fromString("Galen Test");18 try {19 test.getGalenTest().setSpecs(asList(GalenTest.class.getResource("/specs/1.spec").toURI()));20 } catch (Exception e) {21 e.printStackTrace();22 }23 test.getGalenTest().setContext(this);24 return asList(test);25 }26 public void executeTest(GalenTestInfo testInfo) throws IOException {27 WebElement searchBox = driver.findElement(By.name("q"));28 searchBox.sendKeys("galenframework.com");29 searchBox.submit();30 WebElement galenLink = driver.findElement(By.linkText("Galen Framework"));31 galenLink.click();32 checkLayout(driver, testInfo.getGalenTest().getSpecs(), asList("desktop", "mobile"));33 }34 public void checkLayout(WebDriver driver, List<String> specs, List<String> includedTags) throws IOException {35 List<String> excludedTags = new LinkedList<String>();36 excludedTags.add("mobile");37 PageSpec pageSpec = loadPageSpec(specs);38 LayoutReport layoutReport = new LayoutReportBuilder().checkLayout(driver, pageSpec, includedTags, excludedTags);39 TestReport testReport = new TestReport();40 testReport.layout(layoutReport, "check layout");41 getReport().test(pageSpec.getName(), testReport);42 }43}

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.actions;2import java.io.IOException;3import java.util.Arrays;4import java.util.List;5import org.openqa.selenium.WebDriver;6import com.galenframework.api.Galen;7import com.galenframework.reports.model.LayoutReport;8import com.galenframework.reports.model.LayoutReport.LayoutReportStatus;9import com.galenframework.specs.page.PageSpec;10import com.galenframework.validation.ValidationResult;11public class GalenActionMutateArguments {12 public static void main(String[] args) throws IOException {13 System.out.println("Hello World!");14 WebDriver driver = null;15 PageSpec pageSpec = null;16 ValidationResult validationResult = null;17 GalenActionMutateArguments galenActionMutateArguments = new GalenActionMutateArguments();18 LayoutReport layoutReport = new LayoutReport();19 layoutReport.setStatus(LayoutReportStatus.OK);20 validationResult.setLayoutReport(layoutReport);21 List<String> excludedTags = Arrays.asList("tag1", "tag2", "tag3");22 galenActionMutateArguments.setExcludedTags(validationResult, excludedTags);23 Galen.checkLayout(driver, pageSpec, Arrays.asList("tag1", "tag2", "tag3"));24 }25}

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.actions;2import java.util.ArrayList;3import java.util.List;4import com.galenframework.api.Galen;5import com.galenframework.reports.model.LayoutReport;6public class GalenActionMutateArguments {7public static void main(String[] args) throws Exception {8List<String> tags = new ArrayList<String>();9tags.add("tag1");10tags.add("tag2");11GalenActionMutateArguments galenActionMutateArguments = new GalenActionMutateArguments();12galenActionMutateArguments.setExcludedTags(tags);

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1import com.galenframework.api.Galen;2import com.galenframework.actions.GalenActionMutateArguments;3import com.galenframework.reports.GalenTestInfo;4import com.galenframework.reports.model.LayoutReport;5import com.galenframework.reports.model.LayoutReportError;6import com.galenframework.reports.model.LayoutReportStatus;7import com.galenframework.specs.page.PageSpec;8import org.openqa.selenium.WebDriver;9import org.openqa.selenium.chrome.ChromeDriver;10import org.testng.annotations.Test;11import java.io.IOException;12import java.util.Arrays;13import java.util.LinkedList;14import java.util.List;15public class ExcludedTags {16 public void checkLayout() throws IOException {17 System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shubham\\Downloads\\chromedriver.exe");18 WebDriver driver = new ChromeDriver();19 PageSpec pageSpec = Galen.loadSpec("specs\\w3schools.spec");20 LayoutReport layoutReport = Galen.checkLayout(driver, pageSpec, Arrays.asList("mobile", "tablet"));21 System.out.println("layoutReport: " + layoutReport);22 driver.close();23 }24}25import com.galenframework.api.Galen;26import com.galenframework.actions.GalenActionMutateArguments;27import com.galenframework.reports.GalenTestInfo;28import com.galenframework.reports.model.LayoutReport;29import com.galenframework.reports.model.LayoutReportError;30import com.galenframework.reports.model.LayoutReportStatus;31import com.galenframework.specs.page.PageSpec;32import org.openqa.selenium.WebDriver;33import org.openqa.selenium.chrome.ChromeDriver;34import org.testng.annotations.Test;35import java.io.IOException;36import java.util.Arrays;37import java.util.LinkedList;38import java.util.List;39public class ExcludedTags {40 public void checkLayout() throws IOException {41 System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shubham\\Downloads\\chromedriver.exe");42 WebDriver driver = new ChromeDriver();

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.java.using;2import com.galenframework.actions.GalenActionMutateArguments;3import com.galenframework.api.Galen;4import com.galenframework.reports.GalenTestInfo;5import com.galenframework.reports.TestReport;6import com.galenframework.reports.model.LayoutReport;7import com.galenframework.suite.GalenPageTest;8import com.galenframework.suite.actions.GalenPageAction;9import com.galenframework.suite.actions.GalenPageActionCheckLayout;10import com.galenframework.suite.actions.GalenPageActionMutate;11import com.galenframework.tests.GalenBasicTest;12import com.galenframework.tests.GalenTest;13import com.galenframework.tests.GalenTestInfo;14import com.galenframework.tests.model.LayoutReport;15import com.galenframework.validation.ValidationListener;16import com.galenframework.validation.ValidationObject;17import com.galenframework.validation.ValidationError;18import com.galenframework.validation.ValidationResult;19import java.io.IOException;20import java.util.Arrays;21import java.util.LinkedList;22import java.util.List;23public class GalenActionMutateArgumentsExample {24 public static void main(String[] args) throws IOException {25 List<String> tagList = new LinkedList<>();26 tagList.add("tag1");27 tagList.add("tag2");28 tagList.add("tag3");29 tagList.add("tag4");30 tagList.add("tag5");31 GalenActionMutateArguments galenActionMutateArguments = new GalenActionMutateArguments();32 galenActionMutateArguments.setExcludedTags(tagList);33 GalenPageActionMutate galenPageActionMutate = new GalenPageActionMutate();34 galenPageActionMutate.setArguments(galenActionMutateArguments);35 GalenPageActionCheckLayout galenPageActionCheckLayout = new GalenPageActionCheckLayout();36 galenPageActionCheckLayout.setArguments("specs/test.spec");

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.java.using;2import com.galenframework.actions.GalenActionMutateArguments;3import com.galenframework.reports.TestReport;4import com.galenframework.reports.model.LayoutReport;5import com.galenframework.specs.Spec;6import com.galenframework.specs.SpecFactory;7import com.galenframework.validation.ValidationObject;8import com.galenframework.validation.ValidationObjectFactory;9import com.galenframework.validation.ValidationResult;10import org.openqa.selenium.WebDriver;11import java.util.List;12import java.util.Map;13import static java.util.Arrays.asList;14public class ExcludeTags {15 public static void main(String[] args) throws Exception {16 Map<String, Object> params = new GalenActionMutateArguments().setExcludedTags(asList("exclude")).execute(asList("include"), null);17 LayoutReport layoutReport = new LayoutReport();18 List<Spec> specs = SpecFactory.parse(asList("check \"div\" inside \"body\" exists", "check \"div\" inside \"body\" exists", "check \"div\" inside \"body\" exists"));19 ValidationObject validationObject = ValidationObjectFactory.getValidationObject("body", driver);20 List<ValidationResult> validationResults = validationObject.checkLayout(layoutReport, specs, new TestReport(), params);21 System.out.println("Validation Results: " + validationResults);22 driver.quit();23 }24}

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.actions;2import com.galenframework.suite.GalenPageAction;3import com.galenframework.suite.actions.GalenActionCheckLayout;4import com.galenframework.suite.actions.GalenActionCheckLayoutReport;5import com.galenframework.suite.actions.GalenActionCheckPage;6import com.galenframework.suite.actions.GalenActionCheckPageReport;7import com.galenframework.suite.actions.GalenActionCheckPageTitle;8import com.galenframework.suite.actions.GalenActionCheckPageUrl;9import com.galenframework.suite.actions.GalenActionExecuteJavascript;10import com.galenframework.suite.actions.GalenActionExecuteJavascriptReport;11import com.galenframework.suite.actions.GalenActionInclude;12import com.galenframework.suite.actions.GalenActionIncludeReport;13import com.galenframework.suite.actions.GalenActionIncludeText;14import com.galenframework.suite.actions.GalenActionIncludeTextReport;15import com.galenframework.suite.actions.GalenActionIncludeUrl;16import com.galenframework.suite.actions.GalenActionIncludeUrlReport;17import com.galenframework.suite.actions.GalenActionInject;18import com.galenframework.suite.actions.GalenActionInjectReport;19import com.galenframework.suite.actions.GalenActionInjectText;20import com.galenframework.suite.actions.GalenActionInjectTextReport;21import com.galenframework.suite.actions.GalenActionInjectUrl;22import com.galenframework.suite.actions.GalenActionInjectUrlReport;23import com.galenframework.suite.actions.GalenActionReport;24import com.galenframework.suite.actions.GalenActionResizeBrowser;25import com.galenframework.suite.actions.GalenActionSetCookie;26import com.galenframework.suite.actions.GalenActionSetCookieReport;27import com.galenframework.suite.actions.GalenActionSetDevice;28import com.galenframework.suite.actions.GalenActionSetJavascriptVariable;29import com.galenframework.suite.actions.GalenActionSetJavascriptVariableReport;30import com.galenframework.suite.actions.GalenActionSetJavascriptVariableText;31import com.galenframework.suite.actions.GalenActionSetJavascriptVariableTextReport;32import com.galenframework.suite.actions.GalenActionSetJavascriptVariableUrl;33import com.galenframework.suite.actions.GalenActionSetJavascriptVariableUrlReport;34import com.galenframework.suite.actions.GalenActionSetJavascriptVariableValue;

Full Screen

Full Screen

setExcludedTags

Using AI Code Generation

copy

Full Screen

1package com.galenframework.java.usinggalen;2import com.galenframework.api.Galen;3import com.galenframework.api.GalenPages;4import com.galenframework.browser.Browser;5import com.galenframework.browser.BrowserFactory;6import com.galenframework.reports.GalenTestInfo;7import com.galenframework.reports.model.LayoutReport;8import com.galenframework.reports.model.LayoutReportError;9import com.galenframework.reports.model.LayoutReportErrorList;10import com.galenframework.reports.model.LayoutReportStatus;11import com.galenframework.reports.model.LayoutReportStatusList;12import com.galenframework.specs.Spec;13import com.galenframework.specs.SpecFactory;14import com.galenframework.specs.page.Locator;15import com.galenframework.specs.page.PageSection;16import com.galenframework.specs.page.PageSpec;17import com.galenf

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful