From 669031ac10d9d052a43e7d6d2cde40347f80c3a3 Mon Sep 17 00:00:00 2001 From: "lesia.matuzok" Date: Thu, 12 Feb 2026 16:25:40 +0000 Subject: [PATCH] IJQA-113 tests: uninstallation fixes Merge-request: IJ-MR-191149 Merged-by: Alesia Matuzok GitOrigin-RevId: e21c18d6944f6a4037fc8d652c27c52d21e6dc89 --- .../PluginsSettingsPageUiComponent.kt | 51 ++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/settings/PluginsSettingsPageUiComponent.kt b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/settings/PluginsSettingsPageUiComponent.kt index 32295c069dbb..4c7dcb5815c6 100644 --- a/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/settings/PluginsSettingsPageUiComponent.kt +++ b/platform/remote-driver/test-sdk/src/com/intellij/driver/sdk/ui/components/settings/PluginsSettingsPageUiComponent.kt @@ -16,12 +16,17 @@ import com.intellij.driver.sdk.ui.components.common.IdeaFrameUI import com.intellij.driver.sdk.ui.components.common.WelcomeScreenUI import com.intellij.driver.sdk.ui.components.common.tabbedPane import com.intellij.driver.sdk.ui.components.elements.DialogUiComponent +import com.intellij.driver.sdk.ui.components.elements.accessibleList import com.intellij.driver.sdk.ui.components.elements.checkBox +import com.intellij.driver.sdk.ui.components.elements.popup import com.intellij.driver.sdk.ui.components.elements.textField import com.intellij.driver.sdk.ui.components.elements.waitSelected +import com.intellij.driver.sdk.ui.ui import com.intellij.driver.sdk.ui.xQuery +import com.intellij.openapi.util.SystemInfo import com.intellij.driver.sdk.waitFor import java.awt.Point +import java.awt.event.KeyEvent import javax.swing.JButton import javax.swing.JCheckBox import javax.swing.JDialog @@ -75,7 +80,7 @@ class PluginsSettingsPageUiComponent(data: ComponentData) : UiComponent(data) { } fun installedTabWorkaroundApply() { - // workaround for bug https://youtrack.jetbrains.com/issue/IJPL-228318 - switch between tabs to refresh UI state + // TODO workaround for bug https://youtrack.jetbrains.com/issue/IJPL-228318 - switch between tabs to refresh UI state openInstalledTab() openMarketplaceTab() } @@ -125,10 +130,15 @@ class PluginsSettingsPageUiComponent(data: ComponentData) : UiComponent(data) { and(byType("com.intellij.ide.plugins.newui.ListPluginComponent"), byAccessibleName(pluginName)) }.apply(action) + fun isPluginPresentInList(pluginName: String): Boolean = + xx(ListPluginComponent::class.java) { + and(byType("com.intellij.ide.plugins.newui.ListPluginComponent"), byAccessibleName(pluginName)) + }.list().isNotEmpty() + fun pluginDetailsPage(action: PluginDetailsPage.() -> Unit = {}): PluginDetailsPage = x(PluginDetailsPage::class.java) { byType("com.intellij.ide.plugins.newui.PluginDetailsPageComponent") }.apply(action) - //Dirty kostyl because our plugin manager can show this btn in one of these places or in both + //TODO Dirty kostyl because our plugin manager can show this btn in one of these places or in both // and we cant predict it until full refactoring fun checkAnyRestartBtnForPlugin(pluginName: String) { step("Wait for restart button to appear either in list or in details") { @@ -145,6 +155,7 @@ class PluginsSettingsPageUiComponent(data: ComponentData) : UiComponent(data) { val name get() = accessibleName val installButton = x { and(byType(JButton::class.java), byAccessibleName("Install")) } val installedButton = x { and(byType(JButton::class.java), byAccessibleName("Installed")) } + val uninstalledButton = x { and(byType(JButton::class.java), byAccessibleName("Uninstalled")) } val enabledCheckBox = checkBox { and(byType(JCheckBox::class.java), byAccessibleName("Enabled")) } val ultimateTagLabel = x { and(byType("com.intellij.ide.plugins.newui.TagComponent"), byAccessibleName("Ultimate")) } val proTagLabel = x { and(byType("com.intellij.ide.plugins.newui.TagComponent"), byAccessibleName("Pro")) } @@ -177,6 +188,14 @@ class PluginsSettingsPageUiComponent(data: ComponentData) : UiComponent(data) { return this } + fun checkUninstalledBtn(): ListPluginComponent { + step("Wait for the Uninstalled btn appearance") { + uninstalledButton.waitFound(2.minutes) + } + return this + } + + fun checkRestartBtnInPluginsList(): ListPluginComponent { step("Wait for the Restart IDE btn appearance in the plugins list") { restartIdeButton.waitFound(2.minutes) @@ -192,6 +211,26 @@ class PluginsSettingsPageUiComponent(data: ComponentData) : UiComponent(data) { return this } + fun checkErrorContainsText(errorText: String): ListPluginComponent { + step("[Check] The error notice in the Plugins list contains text '$errorText'") { + errorComponent.waitContainsText(errorText) + } + return this + } + + fun uninstallPluginByHotkey(): ListPluginComponent { + step("Click on plugin and press hotkey") { + click() + keyboard { key(if (SystemInfo.isMac) KeyEvent.VK_BACK_SPACE else KeyEvent.VK_DELETE) } + } + return this + } + + fun pluginDescription(): PluginDetailsPage { + this.click() + return driver.ui.x(PluginDetailsPage::class.java) { byType("com.intellij.ide.plugins.newui.PluginDetailsPageComponent") } + } + @Remote("com.intellij.ide.plugins.newui.ListPluginComponent") interface ListPluginComponentRef { fun getPluginModel(): PluginUiModel @@ -230,6 +269,14 @@ class PluginsSettingsPageUiComponent(data: ComponentData) : UiComponent(data) { return this } + fun uninstallPlugin(): PluginDetailsPage { + step("Click on dropdown and uninstall plugin") { + arrowButton.click() + driver.ui.popup().waitFound(15.seconds).accessibleList().clickItem("Uninstall") + } + return this + } + class OptionButtonUiComponent(data: ComponentData) : UiComponent(data) { val disableButton = x { and(byType(JButton::class.java), byAccessibleName("Disable")) } val enableButton = x { and(byType(JButton::class.java), byAccessibleName("Enable")) }