How to use unpackWebDriverFromSearchContext method of io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility class

Best io.appium code snippet using io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility.unpackWebDriverFromSearchContext

AppiumFieldDecorator.java

Source:AppiumFieldDecorator.java Github

copy

Full Screen

...17import static io.appium.java_client.pagefactory.utils.ProxyFactory.getEnhancedProxy;18import static io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility.getAutomation;19import static io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility.getPlatform;20import static io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility21 .unpackWebDriverFromSearchContext;22import io.appium.java_client.MobileElement;23import io.appium.java_client.TouchableElement;24import io.appium.java_client.android.AndroidDriver;25import io.appium.java_client.android.AndroidElement;26import io.appium.java_client.ios.IOSDriver;27import io.appium.java_client.ios.IOSElement;28import io.appium.java_client.pagefactory.bys.ContentType;29import io.appium.java_client.pagefactory.locator.CacheableLocator;30import org.openqa.selenium.SearchContext;31import org.openqa.selenium.WebDriver;32import org.openqa.selenium.WebElement;33import org.openqa.selenium.remote.RemoteWebElement;34import org.openqa.selenium.support.pagefactory.DefaultFieldDecorator;35import org.openqa.selenium.support.pagefactory.ElementLocator;36import org.openqa.selenium.support.pagefactory.FieldDecorator;37import java.lang.reflect.Constructor;38import java.lang.reflect.Field;39import java.lang.reflect.ParameterizedType;40import java.lang.reflect.Type;41import java.util.ArrayList;42import java.util.HashMap;43import java.util.List;44import java.util.Map;45import java.util.concurrent.TimeUnit;46/**47 * Default decorator for use with PageFactory. Will decorate 1) all of the48 * WebElement fields and 2) List of WebElement that have49 * {@literal @AndroidFindBy}, {@literal @AndroidFindBys}, or50 * {@literal @iOSFindBy/@iOSFindBys} annotation with a proxy that locates the51 * elements using the passed in ElementLocatorFactory.52 * Please pay attention: fields of {@link WebElement}, {@link RemoteWebElement},53 * {@link MobileElement}, {@link AndroidElement} and {@link IOSElement} are allowed54 * to use with this decorator55 */56public class AppiumFieldDecorator implements FieldDecorator {57 private static final List<Class<? extends WebElement>> availableElementClasses =58 new ArrayList<Class<? extends WebElement>>() {59 private static final long serialVersionUID = 1L;60 {61 add(WebElement.class);62 add(RemoteWebElement.class);63 add(MobileElement.class);64 add(TouchableElement.class);65 add(AndroidElement.class);66 add(IOSElement.class);67 }68 };69 private static final Map<Class<? extends SearchContext>, Class<? extends WebElement>>70 elementRuleMap =71 new HashMap<Class<? extends SearchContext>, Class<? extends WebElement>>() {72 private static final long serialVersionUID = 1L;73 {74 put(AndroidDriver.class, AndroidElement.class);75 put(IOSDriver.class, IOSElement.class);76 }77 };78 public static long DEFAULT_IMPLICITLY_WAIT_TIMEOUT = 1;79 public static TimeUnit DEFAULT_TIMEUNIT = TimeUnit.SECONDS;80 private final WebDriver originalDriver;81 private final DefaultFieldDecorator defaultElementFieldDecoracor;82 private final AppiumElementLocatorFactory widgetLocatorFactory;83 private final String platform;84 private final String automation;85 private final TimeOutDuration timeOutDuration;86 public AppiumFieldDecorator(SearchContext context, long implicitlyWaitTimeOut,87 TimeUnit timeUnit) {88 this(context, new TimeOutDuration(implicitlyWaitTimeOut, timeUnit));89 }90 /**91 * @param context is an instance of {@link org.openqa.selenium.SearchContext}92 * It may be the instance of {@link org.openqa.selenium.WebDriver}93 * or {@link org.openqa.selenium.WebElement} or94 * {@link io.appium.java_client.pagefactory.Widget} or some other user's95 * extension/implementation.96 * @param timeOutDuration is a desired duration of the waiting for an element presence.97 */98 public AppiumFieldDecorator(SearchContext context, TimeOutDuration timeOutDuration) {99 this.originalDriver = unpackWebDriverFromSearchContext(context);100 platform = getPlatform(originalDriver);101 automation = getAutomation(originalDriver);102 this.timeOutDuration = timeOutDuration;103 defaultElementFieldDecoracor = new DefaultFieldDecorator(104 new AppiumElementLocatorFactory(context, timeOutDuration, originalDriver,105 new DefaultElementByBuilder(platform, automation))) {106 @Override107 protected WebElement proxyForLocator(ClassLoader ignored, ElementLocator locator) {108 return proxyForAnElement(locator);109 }110 @Override111 @SuppressWarnings("unchecked")112 protected List<WebElement> proxyForListLocator(ClassLoader ignored,113 ElementLocator locator) {...

Full Screen

Full Screen

WebDriverUnpackUtility.java

Source:WebDriverUnpackUtility.java Github

copy

Full Screen

...39 * {@link org.openqa.selenium.internal.WrapsElement} then this method returns40 * null.41 *42 */43 public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchContext) {44 if (searchContext instanceof WebDriver) {45 return (WebDriver) searchContext;46 }47 if (searchContext instanceof WrapsDriver) {48 return unpackWebDriverFromSearchContext(49 ((WrapsDriver) searchContext).getWrappedDriver());50 }51 // Search context it is not only Webdriver. Webelement is search context52 // too.53 // RemoteWebElement and MobileElement implement WrapsDriver54 if (searchContext instanceof WrapsElement) {55 return unpackWebDriverFromSearchContext(56 ((WrapsElement) searchContext).getWrappedElement());57 }58 return null;59 }60 /**61 * @param context is an instance of {@link org.openqa.selenium.SearchContext}62 * It may be the instance of {@link org.openqa.selenium.WebDriver}63 * or {@link org.openqa.selenium.WebElement} or some other user's64 * extension/implementation.65 * Note: if you want to use your own implementation then it should66 * implement {@link org.openqa.selenium.ContextAware} or67 * {@link org.openqa.selenium.internal.WrapsDriver}68 * @return current content type. It depends on current context. If current context is69 * NATIVE_APP it will return70 * {@link io.appium.java_client.pagefactory.bys.ContentType#NATIVE_MOBILE_SPECIFIC}.71 * {@link io.appium.java_client.pagefactory.bys.ContentType#HTML_OR_DEFAULT} will be returned72 * if the current context is WEB_VIEW.73 * {@link io.appium.java_client.pagefactory.bys.ContentType#HTML_OR_DEFAULT} also will be74 * returned if the given {@link org.openqa.selenium.SearchContext}75 * instance doesn't implement76 * {@link org.openqa.selenium.ContextAware} and {@link org.openqa.selenium.internal.WrapsDriver}77 */78 public static ContentType getCurrentContentType(SearchContext context) {79 WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(context);80 if (!ContextAware.class.isAssignableFrom(driver.getClass())) { //it is desktop browser81 return ContentType.HTML_OR_DEFAULT;82 }83 ContextAware contextAware = ContextAware.class.cast(driver);84 String currentContext = contextAware.getContext();85 if (currentContext.contains(NATIVE_APP_PATTERN)) {86 return ContentType.NATIVE_MOBILE_SPECIFIC;87 }88 return ContentType.HTML_OR_DEFAULT;89 }90}...

Full Screen

Full Screen

SapiumFieldDecorator.java

Source:SapiumFieldDecorator.java Github

copy

Full Screen

...52 private final WebDriver originalDriver;5354 public SapiumFieldDecorator(SearchContext context, ElementLocatorFactory factory) {55 this.factory = factory;56 this.originalDriver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(context);57 }58 59 @Override60 public Object decorate(ClassLoader loader, Field field) {61 if (!(WebElement.class.isAssignableFrom(field.getType())62 || isDecoratableList(field))) {63 return null;64 }65 66 ElementLocator locator = factory.createLocator(field);67 68 if (locator == null) {69 return null;70 } ...

Full Screen

Full Screen

Widget.java

Source:Widget.java Github

copy

Full Screen

...14 * limitations under the License.15 */16package io.appium.java_client.pagefactory;17import static io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility18 .unpackWebDriverFromSearchContext;19import org.openqa.selenium.By;20import org.openqa.selenium.SearchContext;21import org.openqa.selenium.WebDriver;22import org.openqa.selenium.WebElement;23import org.openqa.selenium.internal.WrapsDriver;24import org.openqa.selenium.internal.WrapsElement;25import java.util.List;26/**27 * It is the Appium-specific extension of the Page Object design pattern. It allows user28 * to create objects which typify some element with nested sub-elements. Also it allows to29 * describe and encapsulate logic of interaction/behavior within.30 * About the Page Object design pattern please read these documents:31 * - https://code.google.com/p/selenium/wiki/PageObjects32 * - https://code.google.com/p/selenium/wiki/PageFactory33 */34public abstract class Widget implements SearchContext, WrapsDriver, WrapsElement {35 private final SearchContext element;36 protected Widget(WebElement element) {37 this.element = element;38 }39 @Override public List<WebElement> findElements(By by) {40 return element.findElements(by);41 }42 @Override public WebElement findElement(By by) {43 return element.findElement(by);44 }45 @Override public WebDriver getWrappedDriver() {46 return unpackWebDriverFromSearchContext(element);47 }48 @Override public WebElement getWrappedElement() {49 return (WebElement) element;50 }51 public Widget getSelfReference() {52 return this;53 }54}...

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();2unpackUtility.unpackWebDriverFromSearchContext(driver);3WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver);4WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();5unpackUtility.unpackWebDriverFromSearchContext(driver);6WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver);7WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();8unpackUtility.unpackWebDriverFromSearchContext(driver);9WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver);10WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();11unpackUtility.unpackWebDriverFromSearchContext(driver);12WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver);13WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();14unpackUtility.unpackWebDriverFromSearchContext(driver);15WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver);16WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();17unpackUtility.unpackWebDriverFromSearchContext(driver);

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();2unpackUtility.unpackWebDriverFromSearchContext(searchContext);3WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);4WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();5unpackUtility.unpackWebDriverFromSearchContext(searchContext);6WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);7WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();8unpackUtility.unpackWebDriverFromSearchContext(searchContext);9WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);10WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();11unpackUtility.unpackWebDriverFromSearchContext(searchContext);12WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);13WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();14unpackUtility.unpackWebDriverFromSearchContext(searchContext);15WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);16WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();17unpackUtility.unpackWebDriverFromSearchContext(searchContext);

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;2import org.openqa.selenium.WebDriver;3import org.openqa.selenium.WebElement;4import org.openqa.selenium.remote.RemoteWebDriver;5import org.openqa.selenium.support.pagefactory.ElementLocator;6import org.openqa.selenium.support.pagefactory.ElementLocatorFactory;7public class AppiumElementLocatorFactory implements ElementLocatorFactory {8 private final WebDriver driver;9 private final long timeOutInSeconds;10 public AppiumElementLocatorFactory(WebDriver driver, long timeOutInSeconds) {11 this.driver = driver;12 this.timeOutInSeconds = timeOutInSeconds;13 }14 public ElementLocator createLocator(final WebElement element) {15 return new AppiumElementLocator(WebDriverUnpackUtility.unpackWebDriverFromSearchContext(element), element, timeOutInSeconds);16 }17 public ElementLocator createLocator(final WebDriver driver) {18 return new AppiumElementLocator(WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver), driver, timeOutInSeconds);19 }20}21import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;22import org.openqa.selenium.WebDriver;23import org.openqa.selenium.WebElement;24import org.openqa.selenium.remote.RemoteWebDriver;25import org.openqa.selenium.support.pagefactory.ElementLocator;26import org.openqa.selenium.support.pagefactory.ElementLocatorFactory;27public class AppiumElementLocatorFactory implements ElementLocatorFactory {28 private final WebDriver driver;29 private final long timeOutInSeconds;30 public AppiumElementLocatorFactory(WebDriver driver, long timeOutInSeconds) {31 this.driver = driver;32 this.timeOutInSeconds = timeOutInSeconds;33 }34 public ElementLocator createLocator(final WebElement element) {35 return new AppiumElementLocator(WebDriverUnpackUtility.unpackWebDriverFromSearchContext(element), element, timeOutInSeconds);36 }37 public ElementLocator createLocator(final WebDriver driver) {38 return new AppiumElementLocator(WebDriverUnpackUtility.unpackWebDriverFromSearchContext(driver), driver, timeOutInSeconds);39 }40}41import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;42import org.openqa.selenium.WebDriver;43import org.openqa.selenium.WebElement;44import org.openqa.selenium.remote.RemoteWebDriver;45import org.openqa.selenium.support.pagefactory.ElementLocator;46import org.openqa.selenium.support.pagefactory.ElementLocatorFactory

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();2WebDriver driver = unpackUtility.unpackWebDriverFromSearchContext(searchContext);3WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);4WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);5WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);6WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);7WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);8WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);9WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);10WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);11WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);12WebDriver driver = WebDriverUnpackUtility.unpackWebDriverFromSearchContext(searchContext);

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1package appium.java;2import org.openqa.selenium.WebDriver;3import org.openqa.selenium.WebElement;4import org.openqa.selenium.support.FindBy;5import org.openqa.selenium.support.PageFactory;6import io.appium.java_client.pagefactory.AppiumFieldDecorator;7import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;8public class UnpackWebDriverFromSearchContext {9 private WebElement accessibility;10 public UnpackWebDriverFromSearchContext(WebDriver driver) {11 PageFactory.initElements(new AppiumFieldDecorator(driver), this);12 }13 public WebElement getAccessibility() {14 return accessibility;15 }16 public static void main(String[] args) {17 System.out.println("Unpack WebDriver From Search Context");18 WebDriver driver = null;19 UnpackWebDriverFromSearchContext unpackWebDriverFromSearchContext = new UnpackWebDriverFromSearchContext(driver);20 WebDriverUnpackUtility.unpackWebDriverFromSearchContext(unpackWebDriverFromSearchContext.getAccessibility());21 }22}23package appium.java;24import org.openqa.selenium.WebElement;25import org.openqa.selenium.support.FindBy;26import org.openqa.selenium.support.PageFactory;27import io.appium.java_client.pagefactory.AppiumFieldDecorator;28import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;29public class UnpackWebDriverFromSearchContext {30 private WebElement accessibility;31 public UnpackWebDriverFromSearchContext() {32 PageFactory.initElements(new AppiumFieldDecorator(AppiumDriverInstance.driver), this);33 }34 public WebElement getAccessibility() {35 return accessibility;36 }37 public static void main(String[] args) {38 System.out.println("Unpack WebDriver From Search Context");39 UnpackWebDriverFromSearchContext unpackWebDriverFromSearchContext = new UnpackWebDriverFromSearchContext();40 WebDriverUnpackUtility.unpackWebDriverFromSearchContext(unpackWebDriverFromSearchContext.getAccessibility());41 }42}43package appium.java;44import org.openqa.selenium.WebElement;45import org.openqa.selenium.support.FindBy;46import org.openqa.selenium.support.PageFactory;47import io.appium.java_client.pagefactory.AppiumFieldDecorator;48import io.appium.java_client.pagefactory.utils

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1package com.appium;2import java.io.File;3import java.net.MalformedURLException;4import java.net.URL;5import java.util.concurrent.TimeUnit;6import org.openqa.selenium.remote.DesiredCapabilities;7import io.appium.java_client.android.AndroidDriver;8import io.appium.java_client.pagefactory.AppiumFieldDecorator;9import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;10import io.appium.java_client.remote.MobileCapabilityType;11public class AppiumTest {12public static void main(String[] args) throws MalformedURLException {13DesiredCapabilities capabilities = new DesiredCapabilities();14capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android");15capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");16capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");17capabilities.setCapability(MobileCapabilityType.VERSION, "7.0");18capabilities.setCapability(MobileCapabilityType.APP, "C:\\Users\\Saurabh\\Downloads\\com.android.chrome.apk");

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1import org.openqa.selenium.WebDriver;2import org.openqa.selenium.WebElement;3import org.openqa.selenium.support.pagefactory.Annotations;4import org.openqa.selenium.support.pagefactory.ElementLocator;5import io.appium.java_client.pagefactory.utils.WebDriverUnpackUtility;6public class MyElementLocator implements ElementLocator {7 private final WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();8 private final WebDriver driver;9 private final ElementLocator locator;10 private final Annotations annotations;11 public MyElementLocator(WebDriver driver, ElementLocator locator, Annotations annotations) {12 this.driver = driver;13 this.locator = locator;14 this.annotations = annotations;15 }16 public WebElement findElement() {17 return unpackUtility.unpackWebDriverFromSearchContext(driver, locator.findElement());18 }19 public List<WebElement> findElements() {20 List<WebElement> elements = locator.findElements();21 List<WebElement> unpackedElements = new ArrayList<>();22 for (WebElement element : elements) {23 unpackedElements.add(unpackUtility.unpackWebDriverFromSearchContext(driver, element));24 }25 return unpackedElements;26 }27 public String toString() {28 return locator.toString();29 }30}31import org.openqa.selenium.WebDriver;32import org.openqa.selenium.support.pagefactory.ElementLocator;33import org.openqa.selenium.support.pagefactory.ElementLocatorFactory;34public class MyElementLocatorFactory implements ElementLocatorFactory {35 private final WebDriver driver;36 public MyElementLocatorFactory(WebDriver driver) {37 this.driver = driver;38 }39 public ElementLocator createLocator(Field field) {40 return new MyElementLocator(driver, new DefaultElementLocator(driver, field), new Annotations(field));41 }42}43import org.openqa.selenium.WebDriver;44import org.openqa.selenium.support.PageFactory;45public class MyPageFactory extends PageFactory {46 public static void initElements(WebDriver driver, Object page) {47 initElements(new MyElementLocatorFactory(driver), page);48 }49}50import org.openqa.selenium.WebDriver;51import org.openqa.selenium.WebElement;52import org.openqa.selenium.support.FindBy;53public class MyPage {54 @FindBy(id = "some_id")55 private WebElement element;56 public void doSomething() {57 element.click();58 }59}60public class MyTest {

Full Screen

Full Screen

unpackWebDriverFromSearchContext

Using AI Code Generation

copy

Full Screen

1WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();2WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);3WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();4WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);5WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();6WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);7WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();8WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);9WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();10WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);11WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();12WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);13WebDriverUnpackUtility unpackUtility = new WebDriverUnpackUtility();14WebDriver webdriver = unpackUtility.unpackWebDriverFromSearchContext(context);

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.

Run io.appium automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in WebDriverUnpackUtility

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful