Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions microsoft_edge_site_permissions/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.testsigma.addons</groupId>
<artifactId>microsoft_edge_site_permissions</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<testsigma.sdk.version>1.2.18_cloud</testsigma.sdk.version>
<junit.jupiter.version>5.8.0-M1</junit.jupiter.version>
<testsigma.addon.maven.plugin>1.0.0</testsigma.addon.maven.plugin>
<maven.source.plugin.version>3.2.1</maven.source.plugin.version>
<lombok.version>1.18.20</lombok.version>

</properties>

<dependencies>
<dependency>
<groupId>com.testsigma</groupId>
<artifactId>testsigma-java-sdk</artifactId>
<version>${testsigma.sdk.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.14.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>9.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.0</version>
</dependency>

</dependencies>
<build>
<finalName>microsoft_edge_site_permissions</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${maven.source.plugin.version}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
package com.testsigma.addons.web;

import com.testsigma.sdk.ApplicationType;
import com.testsigma.sdk.WebAction;
import com.testsigma.sdk.annotation.Action;
import com.testsigma.sdk.annotation.TestData;
import lombok.Data;
import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;

@Data
@Action(actionText = "Set edge permission to URL: Target-URL , Permission Name: Permission-Name, Permission Type: Permission-Value",
description = "Set edge site settings permissions to URL.",
applicationType = ApplicationType.WEB,
useCustomScreenshot = false)
public class EdgePermissionAction extends WebAction {

@TestData(reference = "Target-URL")
private com.testsigma.sdk.TestData targetUrl;

@TestData(reference = "Permission-Name")
private com.testsigma.sdk.TestData permissionName;

@TestData(reference = "Permission-Value")
private com.testsigma.sdk.TestData permissionValue;

private static final String SETTINGS_URL_PREFIX = "edge://settings/content/siteDetails?site=";

@Override
public com.testsigma.sdk.Result execute() {
com.testsigma.sdk.Result result = com.testsigma.sdk.Result.SUCCESS;
String permissionName_ = permissionName.getValue().toString();
String permissionValue_ = permissionValue.getValue().toString();
String origWindowHandle = driver.getWindowHandle();
List<String> origWindowsList = new ArrayList<>(driver.getWindowHandles());
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

try {
String edgeSettingsUrl = SETTINGS_URL_PREFIX + targetUrl.getValue().toString();

logger.info("Opening New Tab");
// Open settings page in new tab, switch to it
driver.switchTo().newWindow(WindowType.TAB);
String newTab = driver.getWindowHandles()
.stream()
.filter(handle -> !origWindowsList.contains(handle))
.findFirst()
.orElseThrow(() -> new RuntimeException("Could not find new tab window handle"));

// Wait for the new tab to be available
wait.until(ExpectedConditions.numberOfWindowsToBe(origWindowsList.size() + 1));
Thread.sleep(1500); // Added sleep after new tab

logger.info("Switching To New Tab");
driver.switchTo().window(newTab);
logger.info("Opening Edge settings in a new tab: " + edgeSettingsUrl);
driver.get(edgeSettingsUrl);

// Wait for the page to load and be ready
wait.until(ExpectedConditions.urlContains(edgeSettingsUrl));
Thread.sleep(1500); // Added sleep after navigating to URL

// Wait for the permission element to be present and clickable
logger.info("Waiting for permission element: " + permissionName_);
WebElement dropdownButton = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(
"//div[text()='" + permissionName_ + "']/following::button[contains(@id,'selecttrigger')]"
)));
Thread.sleep(1000);

logger.info("Setting permission: " + permissionName_ + " to " + permissionValue_);
setPermission(driver, permissionName_, permissionValue_, wait, dropdownButton);
Thread.sleep(1500);


logger.info("Refreshing Page");
driver.navigate().refresh();
Thread.sleep(1500); // Added sleep after refresh
// Wait for page to fully load after refresh, and an element to be present
wait.until(ExpectedConditions.presenceOfElementLocated(By.tagName("body")));

} catch (NoSuchElementException e) {
result = com.testsigma.sdk.Result.FAILED;
logger.warn("Failed to locate element or settings are not loaded." + e);
setErrorMessage("Unable to locate settings or element, check if the target URL is valid: " + e.getMessage());
return result;
} catch (TimeoutException e) {
result = com.testsigma.sdk.Result.FAILED;
logger.warn("Timeout while waiting for elements to load." + e);
setErrorMessage("Timeout waiting for elements to be loaded: " + e.getMessage());
return result;
} catch (Exception e) {
result = com.testsigma.sdk.Result.FAILED;
logger.warn("An unexpected error occurred while setting permissions." + e);
setErrorMessage("An unexpected error occurred during permission changes: " + e.getMessage());
return result;
} finally {
// Switch back to original window, ignore if the original window is already closed
try {
logger.info("Switching Back to Original Tab");
driver.switchTo().window(origWindowHandle);
Thread.sleep(1500); //Added a sleep after switching to the original window
// wait for the original window to load before proceeding
wait.until(ExpectedConditions.presenceOfElementLocated(By.tagName("body")));
} catch (NoSuchWindowException e) {
logger.warn("Original window not found, may be closed during execution: " + e.getMessage());
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}

setSuccessMessage("Site permissions changed successfully");
return result;
}

public void setPermission(WebDriver driver, String permissionName, String permissionValue, WebDriverWait wait, WebElement dropdownButton) {
logger.info("Clicking on dropdown button");
dropdownButton.click();

// Locate the options by role option and containing text
logger.info("Selecting the option:" + permissionValue);
WebElement targetOption = wait.until(ExpectedConditions.elementToBeClickable(
By.xpath("//div[@role='option' and .//span[text()='" + permissionValue + "']]")
));
targetOption.click();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
testsigma-sdk.api.key=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIyMjMyMmM2Ni04NWYzLWIyN2UtN2FiOS0zM2U2M2Q4OWM1MGIiLCJ1bmlxdWVJZCI6IjQxODgiLCJpZGVudGl0eUFjY291bnRVVUlkIjoiMzUifQ.Cm68uphCMasBwaj0WopOV17EeaFz7wqSGvFlCaeOV1WTI_wW10zZj410_CiSsIiyB7DLXvLjNxGNJtiMqkLDIQ