Revamp topic details selenium test (#2677)

* Revamp topic details page

* Java checkstyle

* Table details page code refactor

Co-authored-by: kushal <kushalshinde2512@gmail.com>
This commit is contained in:
kshinde2512 2022-02-08 17:50:47 +05:30 committed by GitHub
parent 99a61fa774
commit ee071704fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 235 additions and 139 deletions

View File

@ -1,7 +1,9 @@
package org.openmetadata.catalog.selenium.objectRepository;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Common {
WebDriver webDriver;
@ -21,7 +23,7 @@ public class Common {
By editDescriptionSaveButton = By.cssSelector("[data-testid='save']");
By closeWhatsNew = By.cssSelector("[data-testid='closeWhatsNew']");
By headerSettings = By.cssSelector("[data-testid='menu-button'][id='menu-button-Settings']");
By explore = By.xpath("[data-testid='appbar-item'][id='explore']");
By headerSettingsServices = By.cssSelector("[data-testid='menu-item-Services']");
By addServiceButton = By.cssSelector("[data-testid='add-service-button']");
By noServicesAddServiceButton = By.cssSelector("[data-testid='add-new-user-button']");
@ -58,6 +60,70 @@ public class Common {
By matchesStats = By.cssSelector("[data-testid='matches-stats']");
By editLineageButton = By.cssSelector("[data-testid='edit-lineage']");
By whatsNewModalChangeLogs = By.cssSelector("[data-testid='WhatsNewModalChangeLogs']");
By tableCount = By.xpath("(//span[@data-testid='filter-count'])[1]");
By removeAssociatedTag = By.xpath("//span[@data-testid=\"remove\"]");
By breadCrumb = By.xpath("//li[@data-testid=\"breadcrumb-link\"]");
By descriptionContainer = By.xpath("//div[@data-testid='description']/div/p");
By manage = By.xpath("//button[@data-testid='tab'][contains(text(),'Manage')]");
By selectTier = By.xpath("(//div[@data-testid=\"card-list\"]/div/div/p)[1]");
By difference = By.xpath("//span[@class='diff-added']");
By searchBox = By.xpath("//input[@data-testid=\"searchBox\"]");
By follow = By.cssSelector("button[data-testid='follow-button']");
By users = By.xpath("//div[@data-testid='dropdown-list']//div[2]//button[2]");
By selectUser = By.xpath("//div[@data-testid=\"list-item\"]");
By saveManage = By.cssSelector("[data-testid='saveManageTab']");
By editDescriptionButton = By.xpath("//button[@data-testid= 'edit-description']");
By editDescriptionBox = By.xpath("//div[@data-testid='enterDescription']/div/div[2]/div/div/div/div/div/div");
By version = By.xpath("//button[@data-testid=\"version-button\"]");
By versionRadioButton = By.xpath("//span[@data-testid=\"select-version\"]");
public By version() {
return version;
}
public List<WebElement> versionRadioButton() {
return webDriver.findElements(versionRadioButton);
}
public By editDescriptionButton() {
return editDescriptionButton;
}
public By editDescriptionBox() {
return editDescriptionBox;
}
public By saveManage() {
return saveManage;
}
public By selectUser() {
return selectUser;
}
public By clickUsers() {
return users;
}
public By clickFollow() {
return follow;
}
public By difference() {
return difference;
}
public By selectTier1() {
return selectTier;
}
public By manage() {
return manage;
}
public By descriptionContainer() {
return descriptionContainer;
}
public By displayName() {
return displayName;
@ -306,4 +372,24 @@ public class Common {
public By overviewFilterCount(String entity) {
return By.xpath("//div[@data-testid='" + entity + "-summary']//span[@data-testid='filter-count']");
}
public By explore() {
return explore;
}
public By getTableCount() {
return tableCount;
}
public By removeAssociatedTag() {
return removeAssociatedTag;
}
public List<WebElement> breadCrumb() {
return webDriver.findElements(breadCrumb);
}
public By getSearchBox() {
return searchBox;
}
}

View File

@ -13,14 +13,15 @@ public class TopicDetails {
this.webDriver = webDriver;
}
By addTag = By.xpath("(//div[@class=\"tw-flex tw-flex-wrap\"])");
By addTag = By.xpath("//div[@data-testid=\"tag-conatiner\"]");
By selectTag = By.xpath("(//div[@data-testid=\"list-item\"])[2]");
By selectedTag =
By.xpath("//span[@class=\"tw-no-underline hover:tw-no-underline tw-py-0.5 tw-px-2 tw-pl-2 tw-pr-1\"]");
By breadCrumbTags = By.xpath("//span[@class=\"tw-no-underline hover:tw-no-underline tw-px-1\"]");
By breadCrumbTags = By.xpath("//span[@data-testid=\"tags\"]");
By editDescriptionButton = By.xpath("//button[@data-testid=\"edit-description\"]");
By config = By.xpath("(//button[@data-testid = \"tab\"])[2]");
By manage = By.xpath("(//button[@data-testid = \"tab\"])[3]");
By topicName = By.linkText("orders");
public By addTag() {
return addTag;
@ -34,8 +35,8 @@ public class TopicDetails {
return webDriver.findElements(selectedTag);
}
public List<WebElement> breadCrumbTag() {
return webDriver.findElements(breadCrumbTags);
public By breadCrumbTag() {
return breadCrumbTags;
}
public By editDescriptionButton() {
@ -49,4 +50,8 @@ public class TopicDetails {
public By manage() {
return manage;
}
public By topicName() {
return topicName;
}
}

View File

@ -160,13 +160,13 @@ public class TableDetailsPageTest {
@Order(6)
void removeTags() {
openExplorePage();
List<WebElement> tagDisplayed = topicDetails.breadCrumbTag();
List<WebElement> tagDisplayed = webDriver.findElements(topicDetails.breadCrumbTag());
Events.click(webDriver, explorePage.selectTable());
Events.click(webDriver, tableDetails.tagName());
Events.click(webDriver, tableDetails.removeTag());
Events.click(webDriver, tableDetails.saveTag());
webDriver.navigate().refresh();
List<WebElement> updatedTags = topicDetails.breadCrumbTag();
List<WebElement> updatedTags = webDriver.findElements(topicDetails.breadCrumbTag());
if (updatedTags.contains(tagDisplayed.get(1))) {
Assert.fail("Selected Tag is not removed");
} else {

View File

@ -16,21 +16,18 @@ package org.openmetadata.catalog.selenium.pages.topicDetails;
import com.github.javafaker.Faker;
import java.time.Duration;
import java.util.ArrayList;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import java.util.List;
import java.util.logging.Logger;
import org.junit.jupiter.api.*;
import org.openmetadata.catalog.selenium.events.Events;
import org.openmetadata.catalog.selenium.objectRepository.*;
import org.openmetadata.catalog.selenium.properties.Property;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
@Order(7)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ -41,9 +38,19 @@ public class TopicDetailsPageTest {
static String enterDescription = "//div[@data-testid='enterDescription']/div/div[2]/div/div/div/div/div/div";
static Actions actions;
static WebDriverWait wait;
static String topic = "orders";
Integer waitTime = Property.getInstance().getSleepTime();
String webDriverInstance = Property.getInstance().getWebDriver();
String webDriverPath = Property.getInstance().getWebDriverPath();
Common common;
TopicDetails topicDetails;
ExplorePage explorePage;
MyDataPage myDataPage;
private static final Logger LOG = Logger.getLogger(TopicDetails.class.getName());
int counter = 2;
String xpath = "//li[@data-testid='breadcrumb-link'][" + counter + "]";
String description = "Test@1234";
String updatedDescription = "Updated Description";
@BeforeEach
public void openMetadataWindow() {
@ -51,7 +58,11 @@ public class TopicDetailsPageTest {
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--window-size=1280,800");
webDriver = new ChromeDriver(options);
webDriver = new ChromeDriver();
common = new Common(webDriver);
topicDetails = new TopicDetails(webDriver);
explorePage = new ExplorePage(webDriver);
myDataPage = new MyDataPage(webDriver);
actions = new Actions(webDriver);
wait = new WebDriverWait(webDriver, Duration.ofSeconds(30));
webDriver.manage().window().maximize();
@ -60,176 +71,170 @@ public class TopicDetailsPageTest {
@Test
@Order(1)
public void openExplorePage() throws InterruptedException {
Events.click(webDriver, By.cssSelector("[data-testid='closeWhatsNew']")); // Close What's new
Events.click(webDriver, By.cssSelector("[data-testid='appbar-item'][id='explore']")); // Explore
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[2]")); // Topics
Thread.sleep(waitTime);
void openExplorePage() throws InterruptedException {
Events.click(webDriver, common.closeWhatsNew());
Events.click(webDriver, explorePage.explore());
Thread.sleep(3000);
if (webDriver.findElement(common.getTableCount()).isDisplayed()) {
LOG.info("Passed");
} else {
Assert.fail();
}
}
@Test
@Order(2)
public void checkTabs() throws InterruptedException {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Thread.sleep(waitTime);
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[2]"));
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[3]"));
Events.sendKeys(webDriver, common.getSearchBox(), topic);
Events.click(webDriver, topicDetails.topicName());
Events.click(webDriver, topicDetails.config());
Events.click(webDriver, common.manage());
}
@Test
@Order(3)
public void checkFollow() throws InterruptedException {
void checkFollow() throws InterruptedException {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='follow-button']"));
Events.click(webDriver, By.cssSelector("[data-testid='getFollowerDetail']"));
Events.click(webDriver, By.cssSelector("[data-testid='follow-button']"));
Events.click(webDriver, By.cssSelector("[data-testid='getFollowerDetail']"));
Events.sendKeys(webDriver, common.getSearchBox(), topic);
Events.click(webDriver, topicDetails.topicName());
String follow = webDriver.findElement(common.clickFollow()).getText();
if (follow.equals("Unfollow")) {
Events.click(webDriver, common.clickFollow());
Events.click(webDriver, common.clickFollow());
} else {
Events.click(webDriver, common.clickFollow());
}
Events.click(webDriver, myDataPage.clickHome());
String tableName = webDriver.findElement(myDataPage.following()).getText();
Assert.assertEquals(tableName, "Started following " + topic);
}
@Test
@Order(4)
public void addTags() throws InterruptedException {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='tags']"));
Events.click(webDriver, By.cssSelector("[data-testid='associatedTagName']"));
for (int i = 0; i <= 1; i++) {
Events.sendKeys(webDriver, By.cssSelector("[data-testid='associatedTagName']"), "P");
Events.click(webDriver, By.cssSelector("[data-testid='list-item']"));
String[] selectedTag = new String[3];
Events.click(webDriver, explorePage.topics());
Events.click(webDriver, explorePage.selectTable());
Events.click(webDriver, topicDetails.addTag());
Events.click(webDriver, common.enterAssociatedTagName());
for (int i = 0; i < 3; i++) {
Events.sendKeys(webDriver, common.enterAssociatedTagName(), "P");
Events.click(webDriver, common.tagListItem());
selectedTag[i] = common.tagListItem().toString();
}
Events.click(webDriver, common.saveAssociatedTag());
webDriver.navigate().refresh();
List<WebElement> TagDisplayed = webDriver.findElements(topicDetails.breadCrumbTag());
Thread.sleep(waitTime);
for (int j = 0; j < TagDisplayed.size(); j++) {
Assert.assertEquals(TagDisplayed.get(j).getText(), selectedTag[j]);
}
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
}
@Test
@Order(5)
public void removeTag() throws InterruptedException {
void removeTags() throws InterruptedException {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[1]"));
Events.click(webDriver, By.cssSelector("[data-testid='tag-conatiner']"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='remove']"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='remove']"));
Thread.sleep(waitTime);
Events.click(webDriver, By.cssSelector("[data-testid='saveAssociatedTag']"));
Events.click(webDriver, explorePage.topics());
Events.click(webDriver, explorePage.selectTable());
List<WebElement> tagDisplayed = webDriver.findElements(topicDetails.breadCrumbTag());
Events.click(webDriver, topicDetails.addTag());
Events.click(webDriver, common.removeAssociatedTag());
Events.click(webDriver, common.saveAssociatedTag());
webDriver.navigate().refresh();
List<WebElement> updatedTags = webDriver.findElements(topicDetails.breadCrumbTag());
if (updatedTags.get(1).equals(tagDisplayed.get(1))) {
Assert.fail("Selected Tag is not removed");
} else {
LOG.info("Passed");
}
}
@Test
@Order(6)
public void editDescription() throws InterruptedException {
void editDescription() throws InterruptedException {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
String editDescription = faker.address().toString();
String updateDescription = faker.address().toString();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Events.sendKeys(webDriver, By.xpath(enterDescription), editDescription);
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
Events.click(webDriver, explorePage.topics());
Events.click(webDriver, explorePage.selectTable());
Events.click(webDriver, common.editDescriptionButton());
Events.sendKeys(webDriver, common.editDescriptionBox(), Keys.CONTROL + "A");
Events.sendKeys(webDriver, common.editDescriptionBox(), description);
Events.click(webDriver, common.editDescriptionSaveButton());
Thread.sleep(waitTime);
webDriver.navigate().refresh();
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Thread.sleep(1000);
webDriver.findElement(By.xpath("//*[text()[contains(.,'" + editDescription + "')]] "));
Events.sendKeys(webDriver, By.xpath(enterDescription), updateDescription);
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
Events.click(webDriver, common.editDescriptionButton());
Events.sendKeys(webDriver, common.editDescriptionBox(), Keys.CONTROL + "A");
Events.sendKeys(webDriver, common.editDescriptionBox(), updatedDescription);
Events.click(webDriver, common.editDescriptionSaveButton());
webDriver.navigate().refresh();
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Thread.sleep(1000);
webDriver.findElement(By.xpath("//*[text()[contains(.,'" + editDescription + updateDescription + "')]] "));
Events.click(webDriver, By.cssSelector("[data-testid='cancel']"));
String checkDescription = webDriver.findElement(common.descriptionContainer()).getText();
Assert.assertEquals(checkDescription, updatedDescription);
}
@Test
@Order(7)
public void checkManage() throws InterruptedException {
openExplorePage();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.xpath("(//button[@data-testid='tab'])[3]"));
Events.click(webDriver, By.cssSelector("[data-testid='owner-dropdown']")); // Owner
Events.sendKeys(webDriver, By.cssSelector("[data-testid='searchInputText']"), "Cloud");
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Select User/Team
Events.click(webDriver, By.cssSelector("[data-testid='card-list']")); // Select Tier
Events.click(webDriver, By.cssSelector("[data-testid='saveManageTab']")); // Save
webDriver.navigate().back();
webDriver.navigate().refresh();
Events.click(webDriver, explorePage.topics());
Events.click(webDriver, explorePage.selectTable());
Thread.sleep(waitTime);
Events.click(webDriver, common.manage());
Events.click(webDriver, common.ownerDropdown());
Events.click(webDriver, common.clickUsers());
Events.click(webDriver, common.selectUser());
Events.click(webDriver, common.selectTier1());
Events.click(webDriver, common.saveManage());
}
@Test
@Order(8)
public void checkBreadCrumb() throws InterruptedException {
void checkBreadCrumb() throws Exception {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
String editDescription = faker.address().toString();
String updateDescription = faker.address().toString();
Events.click(webDriver, By.cssSelector("[data-testid='sortBy']")); // Sort By
Events.click(webDriver, By.cssSelector("[data-testid='list-item']")); // Last Updated
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("[data-testid='breadcrumb-link']")));
Events.click(webDriver, By.cssSelector("[data-testid='breadcrumb-link']"));
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("[data-testid='edit-description']")));
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']")); // edit description
Events.sendKeys(webDriver, By.xpath(enterDescription), editDescription);
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
webDriver.navigate().refresh();
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']")); // edit description
Thread.sleep(1000);
webDriver.findElement(By.xpath("//*[text()[contains(.,'" + editDescription + "')]] "));
Events.sendKeys(webDriver, By.xpath(enterDescription), updateDescription);
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
webDriver.navigate().refresh();
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Thread.sleep(1000);
webDriver.findElement(By.xpath("//*[text()[contains(.,'" + editDescription + updateDescription + "')]] "));
Events.click(webDriver, By.cssSelector("[data-testid='cancel']"));
for (int i = 1; i <= 3; i++) { // check topics in service
Events.click(webDriver, By.xpath("(//tr[@data-testid='column']//td[1]/a)" + "[" + i + "]")); // topics
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']")); // edit description
Events.sendKeys(webDriver, By.xpath(enterDescription), editDescription);
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
webDriver.navigate().refresh();
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']")); // edit description
Thread.sleep(1000);
webDriver.findElement(By.xpath("//*[text()[contains(.,'" + editDescription + "')]] "));
Events.sendKeys(webDriver, By.xpath(enterDescription), updateDescription);
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
webDriver.navigate().refresh();
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Thread.sleep(1000);
webDriver.findElement(By.xpath("//*[text()[contains(.,'" + editDescription + updateDescription + "')]] "));
Events.click(webDriver, By.cssSelector("[data-testid='cancel']"));
Thread.sleep(waitTime);
webDriver.navigate().back();
Events.click(webDriver, explorePage.topics());
Events.click(webDriver, explorePage.selectTable());
List<WebElement> br = common.breadCrumb();
// Using for loop to check breadcrumb links
// Since after navigating back we are facing StaleElementException using try catch block.
for (WebElement link : br) {
try {
link.click();
webDriver.navigate().back();
} catch (StaleElementReferenceException ex) {
WebElement breadcrumb_link = webDriver.findElement(By.xpath(xpath));
breadcrumb_link.click();
}
}
}
@Test
@Order(9)
public void checkVersion() throws InterruptedException {
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
openExplorePage();
Events.click(webDriver, By.xpath("(//button[@data-testid='table-link'])[last()]"));
Events.click(webDriver, By.cssSelector("[data-testid='version-button']"));
Events.click(webDriver, By.cssSelector("[data-testid='closeDrawer']"));
Events.click(webDriver, By.cssSelector("[data-testid='edit-description']"));
Events.sendKeys(webDriver, By.xpath(enterDescription), faker.address().toString());
Events.click(webDriver, By.cssSelector("[data-testid='save']"));
Events.click(webDriver, By.cssSelector("[data-testid='version-button']"));
Events.click(webDriver, By.xpath("(//span[@data-testid='select-version'])[2]"));
Events.click(webDriver, By.xpath("(//span[@data-testid='select-version'])[1]"));
Events.click(webDriver, By.cssSelector("[data-testid='closeDrawer']"));
int counter = 1;
Events.click(webDriver, explorePage.topics());
Events.click(webDriver, explorePage.selectTable());
Events.click(webDriver, common.version());
List<WebElement> versionRadioButton = common.versionRadioButton();
for (WebElement e : versionRadioButton) {
counter = counter + 1;
if (counter == versionRadioButton.size()) {
break;
}
e.click();
Thread.sleep(waitTime);
Assert.assertTrue(webDriver.findElement(common.difference()).isDisplayed());
((JavascriptExecutor) webDriver).executeScript("arguments[0].scrollIntoView(true);", e);
}
Events.click(webDriver, common.version());
}
@AfterEach