How to use Interface Browser class of org.openqa.selenium.remote package

Best Selenium code snippet using org.openqa.selenium.remote.Interface Browser

Source:Augmenter.java Github

copy

Full Screen

1/*2Copyright 2007-2010 WebDriver committers3Copyright 2007-2010 Google Inc.45Licensed under the Apache License, Version 2.0 (the "License");6you may not use this file except in compliance with the License.7You may obtain a copy of the License at89 http://www.apache.org/licenses/LICENSE-2.01011Unless required by applicable law or agreed to in writing, software12distributed under the License is distributed on an "AS IS" BASIS,13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14See the License for the specific language governing permissions and15limitations under the License.16*/1718package org.openqa.selenium.remote;1920import static org.openqa.selenium.remote.CapabilityType.ROTATABLE;21import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_APPLICATION_CACHE;22import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_BROWSER_CONNECTION;23import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_FINDING_BY_CSS;24import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_LOCATION_CONTEXT;25import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_SQL_DATABASE;26import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_WEB_STORAGE;27import static org.openqa.selenium.remote.CapabilityType.TAKES_SCREENSHOT;2829import com.google.common.base.Throwables;30import com.google.common.collect.Maps;31import com.google.common.collect.Sets;3233import net.sf.cglib.proxy.Enhancer;34import net.sf.cglib.proxy.MethodInterceptor;35import net.sf.cglib.proxy.MethodProxy;3637import org.openqa.selenium.WebDriver;38import org.openqa.selenium.WebElement;39import org.openqa.selenium.remote.html5.AddApplicationCache;40import org.openqa.selenium.remote.html5.AddBrowserConnection;41import org.openqa.selenium.remote.html5.AddDatabaseStorage;42import org.openqa.selenium.remote.html5.AddLocationContext;43import org.openqa.selenium.remote.html5.AddWebStorage;4445import java.lang.reflect.Field;46import java.lang.reflect.Method;47import java.util.HashMap;48import java.util.HashSet;49import java.util.Map;50import java.util.Set;5152/**53 * Enhance the interfaces implemented by an instance of the54 * {@link org.openqa.selenium.remote.RemoteWebDriver} based on the returned55 * {@link org.openqa.selenium.Capabilities} of the driver.56 *57 * Note: this class is still experimental. Use at your own risk.58 */59public class Augmenter {60 private final Map<String, AugmenterProvider> driverAugmentors = Maps.newHashMap();61 private final Map<String, AugmenterProvider> elementAugmentors = Maps.newHashMap();6263 public Augmenter() {64 addDriverAugmentation(SUPPORTS_FINDING_BY_CSS, new AddFindsByCss());65 addDriverAugmentation(TAKES_SCREENSHOT, new AddTakesScreenshot());66 addDriverAugmentation(SUPPORTS_SQL_DATABASE, new AddDatabaseStorage());67 addDriverAugmentation(SUPPORTS_LOCATION_CONTEXT, new AddLocationContext());68 addDriverAugmentation(SUPPORTS_APPLICATION_CACHE, new AddApplicationCache());69 addDriverAugmentation(SUPPORTS_BROWSER_CONNECTION, new AddBrowserConnection());70 addDriverAugmentation(SUPPORTS_WEB_STORAGE, new AddWebStorage());71 addDriverAugmentation(ROTATABLE, new AddRotatable());7273 addElementAugmentation(SUPPORTS_FINDING_BY_CSS, new AddFindsChildByCss());74 }7576 /**77 * Add a mapping between a capability name and the implementation of the78 * interface that name represents for instances of79 * {@link org.openqa.selenium.WebDriver}. For example80 * (@link CapabilityType#TAKES_SCREENSHOT} is represents the interface81 * {@link org.openqa.selenium.TakesScreenshot}, which is implemented via the82 * {@link org.openqa.selenium.remote.AddTakesScreenshot} provider.83 *84 * Note: This method is still experimental. Use at your own risk.85 *86 * @param capabilityName The name of the capability to model87 * @param handlerClass The provider of the interface and implementation88 */89 public void addDriverAugmentation(String capabilityName, AugmenterProvider handlerClass) {90 driverAugmentors.put(capabilityName, handlerClass);91 }9293 /**94 * Add a mapping between a capability name and the implementation of the95 * interface that name represents for instances of96 * {@link org.openqa.selenium.WebElement}. For example97 * (@link CapabilityType#TAKES_SCREENSHOT} is represents the interface98 * {@link org.openqa.selenium.internal.FindsByCssSelector}, which is99 * implemented via the {@link AddFindsByCss} provider.100 *101 * Note: This method is still experimental. Use at your own risk.102 *103 * @param capabilityName The name of the capability to model104 * @param handlerClass The provider of the interface and implementation105 */106 public void addElementAugmentation(String capabilityName, AugmenterProvider handlerClass) {107 elementAugmentors.put(capabilityName, handlerClass);108 }109110111 /**112 * Enhance the interfaces implemented by this instance of WebDriver iff that113 * instance is a {@link org.openqa.selenium.remote.RemoteWebDriver}.114 *115 * The WebDriver that is returned may well be a dynamic proxy. You cannot116 * rely on the concrete implementing class to remain constant.117 *118 * @param driver The driver to enhance119 * @return A class implementing the described interfaces.120 */121 public WebDriver augment(WebDriver driver) {122 // TODO(simon): We should really add a "SelfDescribing" interface for this123 if (!(driver instanceof RemoteWebDriver)) {124 return driver;125 }126127 Map<String, AugmenterProvider> augmentors = driverAugmentors;128129 CompoundHandler handler = determineAugmentation(driver, augmentors);130 RemoteWebDriver remote = create(handler, (RemoteWebDriver) driver);131132 copyFields(driver.getClass(), driver, remote);133134 return remote;135 }136137 private void copyFields(Class<?> clazz, Object source, Object target) {138 if (Object.class.equals(clazz)) {139 // Stop!140 return;141 }142143 for (Field field : clazz.getDeclaredFields()) {144 copyField(source, target, field);145 }146147 copyFields(clazz.getSuperclass(), source, target);148 }149150 private void copyField(Object source, Object target, Field field) {151 try {152 field.setAccessible(true);153 Object value = field.get(source);154 field.set(target, value);155 } catch (IllegalAccessException e) {156 throw Throwables.propagate(e);157 }158 }159160 /**161 * Enhance the interfaces implemented by this instance of WebElement iff that162 * instance is a {@link org.openqa.selenium.remote.RemoteWebElement}.163 *164 * The WebElement that is returned may well be a dynamic proxy. You cannot165 * rely on the concrete implementing class to remain constant.166 *167 * @param element The driver to enhance.168 * @return A class implementing the described interfaces.169 */170 public WebElement augment(RemoteWebElement element) {171 // TODO(simon): We should really add a "SelfDescribing" interface for this172 RemoteWebDriver parent = (RemoteWebDriver) element.getWrappedDriver();173 if (parent == null) {174 return element;175 }176 Map<String, AugmenterProvider> augmentors = elementAugmentors;177178 CompoundHandler handler = determineAugmentation(parent, augmentors);179 RemoteWebElement remote = create(handler, element);180181 copyFields(element.getClass(), element, remote);182183 remote.setId(element.getId());184 remote.setParent(parent);185186 return remote;187 }188189 private CompoundHandler determineAugmentation(WebDriver driver, Map<String, AugmenterProvider> augmentors) {190 Map<String, ?> capabilities = ((RemoteWebDriver) driver).getCapabilities().asMap();191192 CompoundHandler handler = new CompoundHandler((RemoteWebDriver) driver);193194 for (Map.Entry<String, ?> capablityName : capabilities.entrySet()) {195 AugmenterProvider augmenter = augmentors.get(capablityName.getKey());196 if (augmenter == null) {197 continue;198 }199200 Object value = capablityName.getValue();201 if (value instanceof Boolean && !((Boolean) value).booleanValue()) {202 continue;203 }204205 handler.addCapabilityHander(augmenter.getDescribedInterface(),206 augmenter.getImplementation(value));207 }208 return handler;209 }210211 @SuppressWarnings({"unchecked"})212 protected <X> X create(CompoundHandler handler, X from) {213 if (handler.isNeedingApplication()) {214 Enhancer enhancer = new Enhancer();215 enhancer.setCallback(handler);216 enhancer.setSuperclass(from.getClass());217218 Set<Class<?>> interfaces = Sets.newHashSet();219 interfaces.addAll(handler.getInterfaces());220 enhancer.setInterfaces(interfaces.toArray(new Class<?>[interfaces.size()]));221222 return (X) enhancer.create();223 }224225 return from;226 }227228 private class CompoundHandler implements MethodInterceptor {229 private Map<Method, InterfaceImplementation> handlers =230 new HashMap<Method, InterfaceImplementation>();231 private Set<Class<?>> interfaces = new HashSet<Class<?>>();232 private final RemoteWebDriver driver;233234 private CompoundHandler(RemoteWebDriver driver) {235 this.driver = driver;236 }237238 public void addCapabilityHander(Class<?> fromInterface, InterfaceImplementation handledBy) {239 interfaces.add(fromInterface);240 for (Method method : fromInterface.getDeclaredMethods()) {241 handlers.put(method, handledBy);242 }243 }244245 public Set<Class<?>> getInterfaces() {246 return interfaces;247 }248249 public boolean isNeedingApplication() {250 return interfaces.size() > 0;251 }252253 public Object intercept(Object self, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {254 InterfaceImplementation handler = handlers.get(method);255256 if (handler == null) {257 return methodProxy.invokeSuper(self, args);258 }259260 return handler.invoke(new ExecuteMethod(driver), self, method, args);261 }262 }263} ...

Full Screen

Full Screen

Source:BaseAugmenter.java Github

copy

Full Screen

1/*2Copyright 2007-2010 Selenium committers3Licensed under the Apache License, Version 2.0 (the "License");4you may not use this file except in compliance with the License.5You may obtain a copy of the License at6 http://www.apache.org/licenses/LICENSE-2.07Unless required by applicable law or agreed to in writing, software8distributed under the License is distributed on an "AS IS" BASIS,9WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.10See the License for the specific language governing permissions and11limitations under the License.12 */13package org.openqa.selenium.remote;14import static org.openqa.selenium.remote.CapabilityType.HAS_TOUCHSCREEN;15import static org.openqa.selenium.remote.CapabilityType.ROTATABLE;16import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_APPLICATION_CACHE;17import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_BROWSER_CONNECTION;18import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_FINDING_BY_CSS;19import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_LOCATION_CONTEXT;20import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_SQL_DATABASE;21import static org.openqa.selenium.remote.CapabilityType.SUPPORTS_WEB_STORAGE;22import static org.openqa.selenium.remote.CapabilityType.TAKES_SCREENSHOT;23import com.google.common.collect.Maps;24import org.openqa.selenium.WebDriver;25import org.openqa.selenium.WebElement;26import org.openqa.selenium.remote.html5.AddApplicationCache;27import org.openqa.selenium.remote.html5.AddBrowserConnection;28import org.openqa.selenium.remote.html5.AddDatabaseStorage;29import org.openqa.selenium.remote.html5.AddLocationContext;30import org.openqa.selenium.remote.html5.AddWebStorage;31import java.util.Map;32/**33 * Enhance the interfaces implemented by an instance of the34 * {@link org.openqa.selenium.remote.RemoteWebDriver} based on the returned35 * {@link org.openqa.selenium.Capabilities} of the driver.36 *37 * Note: this class is still experimental. Use at your own risk.38 */39public abstract class BaseAugmenter {40 private final Map<String, AugmenterProvider> driverAugmentors = Maps.newHashMap();41 private final Map<String, AugmenterProvider> elementAugmentors = Maps.newHashMap();42 public BaseAugmenter() {43 addDriverAugmentation(SUPPORTS_FINDING_BY_CSS, new AddFindsByCss());44 addDriverAugmentation(TAKES_SCREENSHOT, new AddTakesScreenshot());45 addDriverAugmentation(SUPPORTS_SQL_DATABASE, new AddDatabaseStorage());46 addDriverAugmentation(SUPPORTS_LOCATION_CONTEXT, new AddLocationContext());47 addDriverAugmentation(SUPPORTS_APPLICATION_CACHE, new AddApplicationCache());48 addDriverAugmentation(SUPPORTS_BROWSER_CONNECTION, new AddBrowserConnection());49 addDriverAugmentation(SUPPORTS_WEB_STORAGE, new AddWebStorage());50 addDriverAugmentation(ROTATABLE, new AddRotatable());51 addDriverAugmentation(HAS_TOUCHSCREEN, new AddRemoteTouchScreen());52 addElementAugmentation(SUPPORTS_FINDING_BY_CSS, new AddFindsChildByCss());53 }54 /**55 * Add a mapping between a capability name and the implementation of the interface that name56 * represents for instances of {@link org.openqa.selenium.WebDriver}. For example (@link57 * CapabilityType#TAKES_SCREENSHOT} is represents the interface58 * {@link org.openqa.selenium.TakesScreenshot}, which is implemented via the59 * {@link org.openqa.selenium.remote.AddTakesScreenshot} provider.60 * 61 * Note: This method is still experimental. Use at your own risk.62 * 63 * @param capabilityName The name of the capability to model64 * @param handlerClass The provider of the interface and implementation65 */66 public void addDriverAugmentation(String capabilityName, AugmenterProvider handlerClass) {67 driverAugmentors.put(capabilityName, handlerClass);68 }69 /**70 * Add a mapping between a capability name and the implementation of the interface that name71 * represents for instances of {@link org.openqa.selenium.WebElement}. For example (@link72 * CapabilityType#TAKES_SCREENSHOT} is represents the interface73 * {@link org.openqa.selenium.internal.FindsByCssSelector}, which is implemented via the74 * {@link AddFindsByCss} provider.75 * 76 * Note: This method is still experimental. Use at your own risk.77 * 78 * @param capabilityName The name of the capability to model79 * @param handlerClass The provider of the interface and implementation80 */81 public void addElementAugmentation(String capabilityName, AugmenterProvider handlerClass) {82 elementAugmentors.put(capabilityName, handlerClass);83 }84 /**85 * Enhance the interfaces implemented by this instance of WebDriver iff that instance is a86 * {@link org.openqa.selenium.remote.RemoteWebDriver}.87 * 88 * The WebDriver that is returned may well be a dynamic proxy. You cannot rely on the concrete89 * implementing class to remain constant.90 * 91 * @param driver The driver to enhance92 * @return A class implementing the described interfaces.93 */94 public WebDriver augment(WebDriver driver) {95 RemoteWebDriver remoteDriver = extractRemoteWebDriver(driver);96 if (remoteDriver == null) {97 return driver;98 }99 return create(remoteDriver, driverAugmentors, driver);100 }101 /**102 * Enhance the interfaces implemented by this instance of WebElement iff that instance is a103 * {@link org.openqa.selenium.remote.RemoteWebElement}.104 * 105 * The WebElement that is returned may well be a dynamic proxy. You cannot rely on the concrete106 * implementing class to remain constant.107 * 108 * @param element The driver to enhance.109 * @return A class implementing the described interfaces.110 */111 public WebElement augment(RemoteWebElement element) {112 // TODO(simon): We should really add a "SelfDescribing" interface for this113 RemoteWebDriver parent = (RemoteWebDriver) element.getWrappedDriver();114 if (parent == null) {115 return element;116 }117 return create(parent, elementAugmentors, element);118 }119 /**120 * Subclasses should perform the requested augmentation.121 * @return an augmented version of objectToAugment.122 */123 protected abstract <X> X create(RemoteWebDriver driver, Map<String, AugmenterProvider> augmentors,124 X objectToAugment);125 /**126 * Subclasses should extract the remote webdriver or return null if it can't extract it.127 */128 protected abstract RemoteWebDriver extractRemoteWebDriver(WebDriver driver);129}...

Full Screen

Full Screen

Source:Utils.java Github

copy

Full Screen

1package org.openqa.selenium.remote.server.handler.html5;2import com.google.common.base.Throwables;3import org.openqa.selenium.HasCapabilities;4import org.openqa.selenium.UnsupportedCommandException;5import org.openqa.selenium.WebDriver;6import org.openqa.selenium.WebDriverException;7import org.openqa.selenium.html5.ApplicationCache;8import org.openqa.selenium.html5.BrowserConnection;9import org.openqa.selenium.html5.DatabaseStorage;10import org.openqa.selenium.html5.LocationContext;11import org.openqa.selenium.html5.WebStorage;12import org.openqa.selenium.remote.CapabilityType;13import org.openqa.selenium.remote.ExecuteMethod;14import org.openqa.selenium.remote.html5.RemoteApplicationCache;15import org.openqa.selenium.remote.html5.RemoteBrowserConnection;16import org.openqa.selenium.remote.html5.RemoteDatabaseStorage;17import org.openqa.selenium.remote.html5.RemoteLocationContext;18import org.openqa.selenium.remote.html5.RemoteWebStorage;19import java.lang.reflect.InvocationTargetException;20/**21 * Provides utility methods for converting a {@link WebDriver} instance to the various HTML522 * role interfaces. Each method will throw an {@link UnsupportedCommandException} if the driver23 * does not support the corresponding HTML5 feature.24 */25class Utils {26 static ApplicationCache getApplicationCache(WebDriver driver) {27 return convert(driver, ApplicationCache.class, CapabilityType.SUPPORTS_APPLICATION_CACHE,28 RemoteApplicationCache.class);29 }30 static BrowserConnection getBrowserConnection(WebDriver driver) {31 return convert(driver, BrowserConnection.class, CapabilityType.SUPPORTS_BROWSER_CONNECTION,32 RemoteBrowserConnection.class);33 }34 static LocationContext getLocationContext(WebDriver driver) {35 return convert(driver, LocationContext.class, CapabilityType.SUPPORTS_LOCATION_CONTEXT,36 RemoteLocationContext.class);37 }38 static DatabaseStorage getDatabaseStorage(WebDriver driver) {39 return convert(driver, DatabaseStorage.class, CapabilityType.SUPPORTS_SQL_DATABASE,40 RemoteDatabaseStorage.class);41 }42 static WebStorage getWebStorage(WebDriver driver) {43 return convert(driver, WebStorage.class, CapabilityType.SUPPORTS_WEB_STORAGE,44 RemoteWebStorage.class);45 }46 private static <T> T convert(47 WebDriver driver, Class<T> interfaceClazz, String capability,48 Class<? extends T> remoteImplementationClazz) {49 if (interfaceClazz.isInstance(driver)) {50 return interfaceClazz.cast(driver);51 }52 if (driver instanceof ExecuteMethod53 && driver instanceof HasCapabilities54 && ((HasCapabilities) driver).getCapabilities().is(capability)) {55 try {56 return remoteImplementationClazz57 .getConstructor(ExecuteMethod.class)58 .newInstance((ExecuteMethod) driver);59 } catch (InstantiationException e) {60 throw new WebDriverException(e);61 } catch (IllegalAccessException e) {62 throw new WebDriverException(e);63 } catch (InvocationTargetException e) {64 throw Throwables.propagate(e.getCause());65 } catch (NoSuchMethodException e) {66 throw new WebDriverException(e);67 }68 }69 throw new UnsupportedCommandException(70 "driver (" + driver.getClass().getName() + ") does not support "71 + interfaceClazz.getName());72 }73}...

Full Screen

Full Screen

Source:AddBrowserConnection.java Github

copy

Full Screen

1/*2Copyright 2007-2010 Selenium committers3Licensed under the Apache License, Version 2.0 (the "License");4you may not use this file except in compliance with the License.5You may obtain a copy of the License at6 http://www.apache.org/licenses/LICENSE-2.07Unless required by applicable law or agreed to in writing, software8distributed under the License is distributed on an "AS IS" BASIS,9WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.10See the License for the specific language governing permissions and11limitations under the License.12 */13package org.openqa.selenium.remote.html5;14import com.google.common.collect.ImmutableMap;15import org.openqa.selenium.html5.BrowserConnection;16import org.openqa.selenium.remote.AugmenterProvider;17import org.openqa.selenium.remote.DriverCommand;18import org.openqa.selenium.remote.ExecuteMethod;19import org.openqa.selenium.remote.InterfaceImplementation;20import java.lang.reflect.Method;21public class AddBrowserConnection implements AugmenterProvider {22 public Class<?> getDescribedInterface() {23 return BrowserConnection.class;24 }25 public InterfaceImplementation getImplementation(Object value) {26 return new InterfaceImplementation() {27 public Object invoke(ExecuteMethod executeMethod, Object self, Method method,28 Object... args) {29 if ("setOnline".equals(method.getName())) {30 return executeMethod.execute(DriverCommand.SET_BROWSER_ONLINE,31 ImmutableMap.of("state", args[0]));32 } else if ("isOnline".equals(method.getName())) {33 return executeMethod.execute(DriverCommand.IS_BROWSER_ONLINE, null);34 }35 return null;36 }37 };38 }39}...

Full Screen

Full Screen

Interface Browser

Using AI Code Generation

copy

Full Screen

1Interface Browser extends SearchContext {2 void get(String url);3 String getCurrentUrl();4 String getTitle();5 List<WebElement> findElements(By by);6 WebElement findElement(By by);7 String getPageSource();8 void close();9 void quit();10 Set<String> getWindowHandles();11 String getWindowHandle();12 TargetLocator switchTo();13 Navigation navigate();14 Options manage();15}16Interface WebDriver extends SearchContext, JavascriptExecutor, TakesScreenshot, FindsByClassName, FindsById, FindsByLinkText, FindsByName, FindsByTagName, FindsByXPath, FindsByCssSelector, FindsByPartialLinkText, HasInputDevices, HasCapabilities {17 void get(String url);18 String getCurrentUrl();19 String getTitle();20 List<WebElement> findElements(By by);21 WebElement findElement(By by);22 String getPageSource();23 void close();24 void quit();25 Set<String> getWindowHandles();26 String getWindowHandle();27 TargetLocator switchTo();28 Navigation navigate();29 Options manage();30}31Interface Options {32 Logs logs();33 Timeouts timeouts();34 ImeHandler ime();35 Window window();36 Cookies cookies();37 Interface Logs {38 Set<String> getAvailableLogTypes();39 LogEntries get(String logType);40 }41 Interface Timeouts {42 Timeouts implicitlyWait(long time, TimeUnit unit);43 Timeouts setScriptTimeout(long time, TimeUnit unit);44 Timeouts pageLoadTimeout(long time, TimeUnit unit);45 }46 Interface ImeHandler {47 List<String> getAvailableEngines();48 String getActiveEngine();49 boolean isActivated();50 void deactivate();51 void activateEngine(String engine);52 }53 Interface Window {54 void setSize(Dimension targetSize);55 void setPosition(Point targetPosition);56 Dimension getSize();57 Point getPosition();58 void maximize();59 void fullscreen();60 }61 Interface Cookies {62 void addCookie(Cookie cookie);63 void deleteCookieNamed(String name);64 void deleteCookie(Cookie cookie);

Full Screen

Full Screen

Selenium 4 Tutorial:

LambdaTest’s Selenium 4 tutorial is covering every aspects of Selenium 4 testing with examples and best practices. Here you will learn basics, such as how to upgrade from Selenium 3 to Selenium 4, to some advanced concepts, such as Relative locators and Selenium Grid 4 for Distributed testing. Also will learn new features of Selenium 4, such as capturing screenshots of specific elements, opening a new tab or window on the browser, and new protocol adoptions.

Chapters:

  1. Upgrading From Selenium 3 To Selenium 4?: In this chapter, learn in detail how to update Selenium 3 to Selenium 4 for Java binding. Also, learn how to upgrade while using different build tools such as Maven or Gradle and get comprehensive guidance for upgrading Selenium.

  2. What’s New In Selenium 4 & What’s Being Deprecated? : Get all information about new implementations in Selenium 4, such as W3S protocol adaption, Optimized Selenium Grid, and Enhanced Selenium IDE. Also, learn what is deprecated for Selenium 4, such as DesiredCapabilites and FindsBy methods, etc.

  3. Selenium 4 With Python: Selenium supports all major languages, such as Python, C#, Ruby, and JavaScript. In this chapter, learn how to install Selenium 4 for Python and the features of Python in Selenium 4, such as Relative locators, Browser manipulation, and Chrom DevTool protocol.

  4. Selenium 4 Is Now W3C Compliant: JSON Wireframe protocol is retiring from Selenium 4, and they are adopting W3C protocol to learn in detail about the advantages and impact of these changes.

  5. How To Use Selenium 4 Relative Locator? : Selenium 4 came with new features such as Relative Locators that allow constructing locators with reference and easily located constructors nearby. Get to know its different use cases with examples.

  6. Selenium Grid 4 Tutorial For Distributed Testing: Selenium Grid 4 allows you to perform tests over different browsers, OS, and device combinations. It also enables parallel execution browser testing, reads up on various features of Selenium Grid 4 and how to download it, and runs a test on Selenium Grid 4 with best practices.

  7. Selenium Video Tutorials: Binge on video tutorials on Selenium by industry experts to get step-by-step direction from automating basic to complex test scenarios with Selenium.

Selenium 101 certifications:

LambdaTest also provides certification for Selenium testing to accelerate your career in Selenium automation testing.

Run Selenium automation tests on LambdaTest cloud grid

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

Most used methods in Interface-Browser

Test Your Web Or Mobile Apps On 3000+ Browsers

Signup for free

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful