IJQA-113 tests: uninstallation fixes

Merge-request: IJ-MR-191149
Merged-by: Alesia Matuzok <alesia.matuzok@jetbrains.com>

GitOrigin-RevId: e21c18d6944f6a4037fc8d652c27c52d21e6dc89
This commit is contained in:
lesia.matuzok
2026-02-12 16:25:40 +00:00
committed by intellij-monorepo-bot
parent a7461e16d1
commit 669031ac10
@@ -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")) }