{"id":27929,"date":"2024-01-22T10:25:30","date_gmt":"2024-01-22T10:25:30","guid":{"rendered":"https:\/\/www.testingdocs.com\/questions\/?p=27929"},"modified":"2026-01-22T10:28:35","modified_gmt":"2026-01-22T10:28:35","slug":"selenium-by-and-appium-appiumby","status":"publish","type":"post","link":"https:\/\/www.testingdocs.com\/questions\/selenium-by-and-appium-appiumby\/","title":{"rendered":"Selenium By and Appium AppiumBy"},"content":{"rendered":"<h1>Selenium <code class=\"\" data-line=\"\">By<\/code> and Appium <code class=\"\" data-line=\"\">AppiumBy<\/code><\/h1>\n<p>As an Appium and Selenium expert, I\u2019ll explain these concepts in a beginner-friendly way.<br \/>\nBoth <strong>Selenium By<\/strong> and <strong>AppiumBy<\/strong> are used to <em>locate elements<\/em> on an application so that automation scripts can interact with them (click, type, read text, etc.)<\/p>\n<h2>Selenium <code class=\"\" data-line=\"\">By<\/code><\/h2>\n<p>In Selenium, <code class=\"\" data-line=\"\">By<\/code> is a class used to locate elements on <strong>web applications<\/strong>.<br \/>\nIt tells Selenium <em>how<\/em> to find an element on a web page.<\/p>\n<h3>Why Selenium By is needed<\/h3>\n<ul>\n<li>Web pages contain many elements (buttons, inputs, links, etc.).<\/li>\n<li>Selenium needs a clear rule to identify the correct element.<\/li>\n<li><code class=\"\" data-line=\"\">By<\/code> provides different locator strategies to do this.<\/li>\n<\/ul>\n<h3>Common Selenium By locator methods<\/h3>\n<ul>\n<li><code class=\"\" data-line=\"\">By.id()<\/code> \u2013 Locate by HTML id attribute<\/li>\n<li><code class=\"\" data-line=\"\">By.name()<\/code> \u2013 Locate by name attribute<\/li>\n<li><code class=\"\" data-line=\"\">By.className()<\/code> \u2013 Locate by CSS class<\/li>\n<li><code class=\"\" data-line=\"\">By.tagName()<\/code> \u2013 Locate by HTML tag<\/li>\n<li><code class=\"\" data-line=\"\">By.linkText()<\/code> \u2013 Locate link using exact text<\/li>\n<li><code class=\"\" data-line=\"\">By.partialLinkText()<\/code> \u2013 Locate link using partial text<\/li>\n<li><code class=\"\" data-line=\"\">By.cssSelector()<\/code> \u2013 Locate using CSS selector<\/li>\n<li><code class=\"\" data-line=\"\">By.xpath()<\/code> \u2013 Locate using XPath<\/li>\n<\/ul>\n<p>Selenium <code class=\"\" data-line=\"\">By<\/code> is mainly designed for <strong>desktop and mobile web browsers<\/strong>.<\/p>\n<h2>Appium <code class=\"\" data-line=\"\">AppiumBy<\/code><\/h2>\n<p><code class=\"\" data-line=\"\">AppiumBy<\/code> is an Appium-specific locator class used to automate <strong>mobile applications<\/strong><br \/>\n(Android and iOS), including both native apps and mobile web apps.<\/p>\n<h3>Why AppiumBy is needed<\/h3>\n<ul>\n<li>Mobile apps do not use HTML like web apps.<\/li>\n<li>Mobile platforms expose elements using platform-specific attributes.<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy<\/code> supports mobile-only locator strategies.<\/li>\n<\/ul>\n<h3>Common AppiumBy locator methods<\/h3>\n<ul>\n<li><code class=\"\" data-line=\"\">AppiumBy.id()<\/code> \u2013 Locate by resource-id (Android) or accessibility id<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy.accessibilityId()<\/code> \u2013 Locate using accessibility identifier<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy.className()<\/code> \u2013 Locate by UI class<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy.xpath()<\/code> \u2013 Locate using XPath (works for mobile too)<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy.androidUIAutomator()<\/code> \u2013 Android-specific locator<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy.iOSNsPredicateString()<\/code> \u2013 iOS-specific locator<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy.iOSClassChain()<\/code> \u2013 Faster iOS locator strategy<\/li>\n<\/ul>\n<p><code class=\"\" data-line=\"\">AppiumBy<\/code> is optimized for <strong>mobile automation<\/strong> and understands<br \/>\nAndroid and iOS internals.<\/p>\n<h2><code class=\"\" data-line=\"\">By<\/code> and <code class=\"\" data-line=\"\">AppiumBy<\/code><\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"8\">\n<thead>\n<tr>\n<th>Aspect<\/th>\n<th>Selenium By<\/th>\n<th>AppiumBy<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Primary Usage<\/td>\n<td>Web application automation<\/td>\n<td>Mobile application automation<\/td>\n<\/tr>\n<tr>\n<td>Supported Platforms<\/td>\n<td>Desktop and mobile web browsers<\/td>\n<td>Android, iOS (native, hybrid, mobile web)<\/td>\n<\/tr>\n<tr>\n<td>HTML Dependency<\/td>\n<td>Works directly with HTML elements<\/td>\n<td>Does not rely on HTML (uses mobile UI hierarchy)<\/td>\n<\/tr>\n<tr>\n<td>Mobile-specific Locators<\/td>\n<td>Not supported<\/td>\n<td>Supported (UIAutomator, iOS predicates, class chain)<\/td>\n<\/tr>\n<tr>\n<td>Accessibility ID Support<\/td>\n<td>Not available<\/td>\n<td>Available and recommended<\/td>\n<\/tr>\n<tr>\n<td>XPath Support<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Performance on Mobile<\/td>\n<td>Limited and not optimized<\/td>\n<td>Optimized for mobile automation<\/td>\n<\/tr>\n<tr>\n<td>Package<\/td>\n<td><code class=\"\" data-line=\"\">org.openqa.selenium.By<\/code><\/td>\n<td><code class=\"\" data-line=\"\">io.appium.java_client.AppiumBy<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2>Summary<\/h2>\n<ul>\n<li>Use <strong>Selenium By<\/strong> for automating web applications.<\/li>\n<li>Use <strong>AppiumBy<\/strong> for automating mobile applications.<\/li>\n<li><code class=\"\" data-line=\"\">AppiumBy<\/code> extends the idea of <code class=\"\" data-line=\"\">By<\/code> to support mobile-specific locators.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Selenium By and Appium AppiumBy As an Appium and Selenium expert, I\u2019ll explain these concepts in a beginner-friendly way. Both Selenium By and AppiumBy are used to locate elements on an application so that automation scripts can interact with them (click, type, read text, etc.) Selenium By In Selenium, By is a class used to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-27929","post","type-post","status-publish","format-standard","hentry","category-automation","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"_links":{"self":[{"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/posts\/27929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/comments?post=27929"}],"version-history":[{"count":3,"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/posts\/27929\/revisions"}],"predecessor-version":[{"id":27932,"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/posts\/27929\/revisions\/27932"}],"wp:attachment":[{"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/media?parent=27929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/categories?post=27929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.testingdocs.com\/questions\/wp-json\/wp\/v2\/tags?post=27929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}