Hi,
I am getting " org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: URI and package arguments are required ".
This is my code
package androidSec;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;
import org.openqa.selenium.By;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.*;
import org.zaproxy.clientapi.core.ApiResponse;
import org.zaproxy.clientapi.core.ApiResponseElement;
import org.zaproxy.clientapi.core.ClientApi;
import org.zaproxy.clientapi.core.ClientApiException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
public class Sample {
private AndroidDriver driver;
private ClientApi zapClient;
public static final String zapAddress = "0.0.0.0";
public static final int zapPort = 8085;
public static final String zapApiKey = "b5ivdnnb8uc3ei9sgq7mj50gq8";
@BeforeTest
public void setUpAppium() throws MalformedURLException, InterruptedException {
// Desired capabilities for the Android device
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android");
capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.vajro.robin");
capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.vajro.robin.kotlin.ui.splash.activity.SplashActivityKt");
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
capabilities.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, "true");
// Set up proxy for OWASP ZAP
Proxy proxy = new Proxy();
proxy.setHttpProxy(zapAddress + ":" + zapPort);
proxy.setSslProxy(zapAddress + ":" + zapPort);
capabilities.setCapability(MobileCapabilityType.PROXY, proxy);
try {
URI uri = new URI("http://127.0.0.1:4723/wd/hub");
URL url = uri.toURL();
driver = new AndroidDriver(url, capabilities);
Thread.sleep(5000);
} catch (URISyntaxException | MalformedURLException | InterruptedException e) {
e.printStackTrace();
}
zapClient = new ClientApi(zapAddress, zapPort, zapApiKey);
}
@Test
public void testAppFunctionality() throws InterruptedException, ClientApiException {
// Your test cases here, interact with the app using driver.findElement()
launchApp();
// Perform your interactions here
int clickCount = 6;
for (int i = 0; i < clickCount; i++) {
driver.findElement(By.id("com.vajro.robin:id/imgPreviewLogo")).click();
}
Thread.sleep(5000);
driver.findElement(By.id("com.vajro.robin:id/cvPreviewSearchView")).click();
driver.findElement(By.id("com.vajro.robin:id/ivAppIdSearch")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/androidx.appcompat.widget.LinearLayoutCompat/android.widget.FrameLayout/android.widget.ListView/android.widget.CheckedTextView[2]")).click();
driver.findElement(By.id("com.vajro.robin:id/etSearch")).sendKeys("32630");
Thread.sleep(5000);
driver.findElement(By.id("com.vajro.robin:id/tvClientAppId")).isDisplayed();
Thread.sleep(5000);
driver.findElement(By.id("com.vajro.robin:id/llClient")).click();
Thread.sleep(5000);
driver.findElement(By.id("com.vajro.robin:id/tvClientProfileOpenApp")).isDisplayed();
driver.findElement(By.id("com.vajro.robin:id/tvClientProfileOpenApp")).click();
Thread.sleep(5000);
// Trigger passive scanning with OWASP ZAP (example)
zapClient.pscan.enableAllScanners();
zapClient.pscan.setScannerAlertThreshold("10000", "OFF");
zapClient.pscan.enableScanners("true");
// Wait for the scan to complete
while (!"0".equals(getRecordsToScan())) {
Thread.sleep(5000);
}
}
private void launchApp() throws ClientApiException {
String appPackage = "com.vajro.robin";
String appActivity = "com.vajro.robin.kotlin.ui.splash.activity.SplashActivityKt";
String appIntent = "intent://#Intent;"
+ "package=" + appPackage + ";"
+ "action=android.intent.action.MAIN;"
+ "component=" + appPackage + "/" + appActivity + ";"
+ "end";
try {
driver.executeScript("mobile:deepLink", Collections.singletonMap("url", appIntent));
} catch (Exception e) {
e.printStackTrace();
}
}
private String getRecordsToScan() throws ClientApiException {
ApiResponse response = zapClient.pscan.recordsToScan();
ApiResponseElement element = (ApiResponseElement) response;
return element.getValue();
}
@AfterTest
public void tearDown() {
// Quit the driver
if (driver != null) {
driver.quit();
}
}
}