我目前正在创建一个需要验证某些按钮颜色的脚本。我看不到任何可用于验证 Swing 应用程序的按钮颜色的程序/操作。
JButton
是否可以使用 Javascript 或 Python 脚本获取颜色?
我目前正在创建一个需要验证某些按钮颜色的脚本。我看不到任何可用于验证 Swing 应用程序的按钮颜色的程序/操作。
JButton
是否可以使用 Javascript 或 Python 脚本获取颜色?
好的,这是一个添加相应检查器的脚本。它还知道“几个”颜色名称(感谢 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)
运行此脚本后,您可以记录相应的颜色检查
感谢@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)