0

我目前正在创建一个需要验证某些按钮颜色的脚本。我看不到任何可用于验证 Swing 应用程序的按钮颜色的程序/操作。

JButton是否可以使用 Javascript 或 Python 脚本获取颜色?

4

2 回答 2

2

好的,这是一个添加相应检查器的脚本。它还知道“几个”颜色名称(感谢 cindyxiaoxiaoli,请参阅https://stackoverflow.com/a/20670056/3009636获取他的颜色名称列表)...

from de.qfs.apps.qftest.extensions.checks import CheckerRegistry, \
    Checker, DefaultCheckType, CheckDataType
from de.qfs.apps.qftest.shared.data.check import StringCheckData
from de.qfs.lib.util import Pair
import jarray

componentClass = "java.awt.Component"
backgroundColorCheckerType = DefaultCheckType("BackgroundColor", CheckDataType.STRING, "Background color")

colorList = {
    (0xF0, 0xF8, 0xFF) : "AliceBlue",
    (0xFA, 0xEB, 0xD7) : "AntiqueWhite",
    (0x00, 0xFF, 0xFF) : "Aqua",
    (0x7F, 0xFF, 0xD4) : "Aquamarine",
    (0xF0, 0xFF, 0xFF) : "Azure",
    (0xF5, 0xF5, 0xDC) : "Beige",
    (0xFF, 0xE4, 0xC4) : "Bisque",
    (0x00, 0x00, 0x00) : "Black",
    (0xFF, 0xEB, 0xCD) : "BlanchedAlmond",
    (0x00, 0x00, 0xFF) : "Blue",
    (0x8A, 0x2B, 0xE2) : "BlueViolet",
    (0xA5, 0x2A, 0x2A) : "Brown",
    (0xDE, 0xB8, 0x87) : "BurlyWood",
    (0x5F, 0x9E, 0xA0) : "CadetBlue",
    (0x7F, 0xFF, 0x00) : "Chartreuse",
    (0xD2, 0x69, 0x1E) : "Chocolate",
    (0xFF, 0x7F, 0x50) : "Coral",
    (0x64, 0x95, 0xED) : "CornflowerBlue",
    (0xFF, 0xF8, 0xDC) : "Cornsilk",
    (0xDC, 0x14, 0x3C) : "Crimson",
    (0x00, 0xFF, 0xFF) : "Cyan",
    (0x00, 0x00, 0x8B) : "DarkBlue",
    (0x00, 0x8B, 0x8B) : "DarkCyan",
    (0xB8, 0x86, 0x0B) : "DarkGoldenRod",
    (0xA9, 0xA9, 0xA9) : "DarkGray",
    (0x00, 0x64, 0x00) : "DarkGreen",
    (0xBD, 0xB7, 0x6B) : "DarkKhaki",
    (0x8B, 0x00, 0x8B) : "DarkMagenta",
    (0x55, 0x6B, 0x2F) : "DarkOliveGreen",
    (0xFF, 0x8C, 0x00) : "DarkOrange",
    (0x99, 0x32, 0xCC) : "DarkOrchid",
    (0x8B, 0x00, 0x00) : "DarkRed",
    (0xE9, 0x96, 0x7A) : "DarkSalmon",
    (0x8F, 0xBC, 0x8F) : "DarkSeaGreen",
    (0x48, 0x3D, 0x8B) : "DarkSlateBlue",
    (0x2F, 0x4F, 0x4F) : "DarkSlateGray",
    (0x00, 0xCE, 0xD1) : "DarkTurquoise",
    (0x94, 0x00, 0xD3) : "DarkViolet",
    (0xFF, 0x14, 0x93) : "DeepPink",
    (0x00, 0xBF, 0xFF) : "DeepSkyBlue",
    (0x69, 0x69, 0x69) : "DimGray",
    (0x1E, 0x90, 0xFF) : "DodgerBlue",
    (0xB2, 0x22, 0x22) : "FireBrick",
    (0xFF, 0xFA, 0xF0) : "FloralWhite",
    (0x22, 0x8B, 0x22) : "ForestGreen",
    (0xFF, 0x00, 0xFF) : "Fuchsia",
    (0xDC, 0xDC, 0xDC) : "Gainsboro",
    (0xF8, 0xF8, 0xFF) : "GhostWhite",
    (0xFF, 0xD7, 0x00) : "Gold",
    (0xDA, 0xA5, 0x20) : "GoldenRod",
    (0x80, 0x80, 0x80) : "Gray",
    (0x00, 0x80, 0x00) : "Green",
    (0xAD, 0xFF, 0x2F) : "GreenYellow",
    (0xF0, 0xFF, 0xF0) : "HoneyDew",
    (0xFF, 0x69, 0xB4) : "HotPink",
    (0xCD, 0x5C, 0x5C) : "IndianRed",
    (0x4B, 0x00, 0x82) : "Indigo",
    (0xFF, 0xFF, 0xF0) : "Ivory",
    (0xF0, 0xE6, 0x8C) : "Khaki",
    (0xE6, 0xE6, 0xFA) : "Lavender",
    (0xFF, 0xF0, 0xF5) : "LavenderBlush",
    (0x7C, 0xFC, 0x00) : "LawnGreen",
    (0xFF, 0xFA, 0xCD) : "LemonChiffon",
    (0xAD, 0xD8, 0xE6) : "LightBlue",
    (0xF0, 0x80, 0x80) : "LightCoral",
    (0xE0, 0xFF, 0xFF) : "LightCyan",
    (0xFA, 0xFA, 0xD2) : "LightGoldenRodYellow",
    (0xD3, 0xD3, 0xD3) : "LightGray",
    (0x90, 0xEE, 0x90) : "LightGreen",
    (0xFF, 0xB6, 0xC1) : "LightPink",
    (0xFF, 0xA0, 0x7A) : "LightSalmon",
    (0x20, 0xB2, 0xAA) : "LightSeaGreen",
    (0x87, 0xCE, 0xFA) : "LightSkyBlue",
    (0x77, 0x88, 0x99) : "LightSlateGray",
    (0xB0, 0xC4, 0xDE) : "LightSteelBlue",
    (0xFF, 0xFF, 0xE0) : "LightYellow",
    (0x00, 0xFF, 0x00) : "Lime",
    (0x32, 0xCD, 0x32) : "LimeGreen",
    (0xFA, 0xF0, 0xE6) : "Linen",
    (0xFF, 0x00, 0xFF) : "Magenta",
    (0x80, 0x00, 0x00) : "Maroon",
    (0x66, 0xCD, 0xAA) : "MediumAquaMarine",
    (0x00, 0x00, 0xCD) : "MediumBlue",
    (0xBA, 0x55, 0xD3) : "MediumOrchid",
    (0x93, 0x70, 0xDB) : "MediumPurple",
    (0x3C, 0xB3, 0x71) : "MediumSeaGreen",
    (0x7B, 0x68, 0xEE) : "MediumSlateBlue",
    (0x00, 0xFA, 0x9A) : "MediumSpringGreen",
    (0x48, 0xD1, 0xCC) : "MediumTurquoise",
    (0xC7, 0x15, 0x85) : "MediumVioletRed",
    (0x19, 0x19, 0x70) : "MidnightBlue",
    (0xF5, 0xFF, 0xFA) : "MintCream",
    (0xFF, 0xE4, 0xE1) : "MistyRose",
    (0xFF, 0xE4, 0xB5) : "Moccasin",
    (0xFF, 0xDE, 0xAD) : "NavajoWhite",
    (0x00, 0x00, 0x80) : "Navy",
    (0xFD, 0xF5, 0xE6) : "OldLace",
    (0x80, 0x80, 0x00) : "Olive",
    (0x6B, 0x8E, 0x23) : "OliveDrab",
    (0xFF, 0xA5, 0x00) : "Orange",
    (0xFF, 0x45, 0x00) : "OrangeRed",
    (0xDA, 0x70, 0xD6) : "Orchid",
    (0xEE, 0xE8, 0xAA) : "PaleGoldenRod",
    (0x98, 0xFB, 0x98) : "PaleGreen",
    (0xAF, 0xEE, 0xEE) : "PaleTurquoise",
    (0xDB, 0x70, 0x93) : "PaleVioletRed",
    (0xFF, 0xEF, 0xD5) : "PapayaWhip",
    (0xFF, 0xDA, 0xB9) : "PeachPuff",
    (0xCD, 0x85, 0x3F) : "Peru",
    (0xFF, 0xC0, 0xCB) : "Pink",
    (0xDD, 0xA0, 0xDD) : "Plum",
    (0xB0, 0xE0, 0xE6) : "PowderBlue",
    (0x80, 0x00, 0x80) : "Purple",
    (0xFF, 0x00, 0x00) : "Red",
    (0xBC, 0x8F, 0x8F) : "RosyBrown",
    (0x41, 0x69, 0xE1) : "RoyalBlue",
    (0x8B, 0x45, 0x13) : "SaddleBrown",
    (0xFA, 0x80, 0x72) : "Salmon",
    (0xF4, 0xA4, 0x60) : "SandyBrown",
    (0x2E, 0x8B, 0x57) : "SeaGreen",
    (0xFF, 0xF5, 0xEE) : "SeaShell",
    (0xA0, 0x52, 0x2D) : "Sienna",
    (0xC0, 0xC0, 0xC0) : "Silver",
    (0x87, 0xCE, 0xEB) : "SkyBlue",
    (0x6A, 0x5A, 0xCD) : "SlateBlue",
    (0x70, 0x80, 0x90) : "SlateGray",
    (0xFF, 0xFA, 0xFA) : "Snow",
    (0x00, 0xFF, 0x7F) : "SpringGreen",
    (0x46, 0x82, 0xB4) : "SteelBlue",
    (0xD2, 0xB4, 0x8C) : "Tan",
    (0x00, 0x80, 0x80) : "Teal",
    (0xD8, 0xBF, 0xD8) : "Thistle",
    (0xFF, 0x63, 0x47) : "Tomato",
    (0x40, 0xE0, 0xD0) : "Turquoise",
    (0xEE, 0x82, 0xEE) : "Violet",
    (0xF5, 0xDE, 0xB3) : "Wheat",
    (0xFF, 0xFF, 0xFF) : "White",
    (0xF5, 0xF5, 0xF5) : "WhiteSmoke",
    (0xFF, 0xFF, 0x00) : "Yellow",
    (0x9A, 0xCD, 0x32) : "YellowGreen"
}

def getNearestColor(r, g, b):
    nearest = (0x00, 0x00, 0x00)
    diff = r + g + b
    for key in colorList:
        newDiff = abs(r - key[0]) + abs(g - key[1]) + abs(b - key[2])
        if newDiff < diff:
            diff, nearest = newDiff, key
    return colorList.get(nearest)

def rgbToColorName(c):
    a, r, g, b = c.getAlpha(), c.getRed(), c.getGreen(), c.getBlue()
    if a == 0: return "transparent"
    if (r, g, b) in colorList:
        s = colorList.get((r, g, b))
    else:
        s = "nearly %s" % getNearestColor(r, g, b)
    if a != 255:
        s = s + " with a bit of transparency"
    return s

class BackgroundColorChecker(Checker):
    def getSupportedCheckTypes(self, com, item):
        return jarray.array([backgroundColorCheckerType], DefaultCheckType)

    def getCheckData(self, com, item, checkType):
        if backgroundColorCheckerType.getIdentifier() == checkType.getIdentifier():
            color = rgbToColorName(com.getBackground())
            return StringCheckData(checkType.getIdentifier(), color)
        return None

    def getCheckDataAndItem(self, com, item, checkType):
        data = self.getCheckData(com, item, checkType)
        if data == None: return None
        return Pair(data, None)

global backgroundColorCheck

# unregister a maybe already present instance of this checker
try: CheckerRegistry.instance().unregisterChecker(componentClass, backgroundColorCheck)
except: pass

# after unregistering, register a new instance of this checker
backgroundColorCheck = BackgroundColorChecker()
CheckerRegistry.instance().registerChecker(componentClass, backgroundColorCheck)

运行此脚本后,您可以记录相应的颜色检查

记录支票

于 2021-02-22T20:09:23.983 回答
1

感谢@quant,我能够为此创建一个脚本以供参考

ColorList = {
"java.awt.Color[r=211,g=211,b=211]": "GRAY",
"java.awt.Color[r=255,g=0,b=0]": "RED",
"java.awt.Color[r=255,g=255,b=0]": "YELLOW",
"java.awt.Color[r=255,g=255,b=102]": "LYELLOW",
"java.awt.Color[r=0,g=255,b=0]": "GREEN"
}

com = rc.getComponent("$(Component)")
RGBcolor = com.getBackground()
foundcolor = ColorList.get(str(RGBcolor))
rc.checkEqual(foundcolor, "$(expectedcolor)", "Check Color")
print (foundcolor)
于 2021-02-22T01:23:26.277 回答