问题描述
我正在编写一个Java应用程序,让程序员通过指定可见属性来查询网页上的页面元素。其中最重要且最困难的是颜色。
具体而言,我需要一种使用Selenium 2和Webdriver获取网页元素的用户可见颜色的方法。我希望能够查询颜色值(#ff0000
)或名称(red
)。
一个参数应该控制所需相似颜色的百分比,以使其足够“占主导地位”。如果设置为100%
,则不允许元素有任何其他颜色。如果设置为50%
,则元素需要填充一半的颜色。
还应该有另一个参数来控制这些颜色的“容差”。具有更高容差的red
也可以匹配Stackoverflow上的橙色“提问”按钮。
示例
给定众所周知的Stackoverflow网页,我突出显示了要检查的页面元素:。在较高的颜色容差和不太高的主导百分比下,以下查询应返回指定的结果:
color('#FFEFC6') // exact match: true
color('yellow') // match in tolerance range: true
color('orange') // true
color('blue') // false
color('green') // false
我的第一个方法
最好的选择是使用CSS属性,如color
和background-color
。但是它们不考虑图片,而对于好的颜色查询,图片是必需的。此外,由于css选择器继承和透明度处理的原因,它们可能会产生困难。另外,具有较高z-index
的绝对定位元素可能会产生意外结果。
给出要检查的网页元素。它可以表示为JavaScript DOM元素(或JQuery对象)或Webdriver的Java绑定中的RemoteWebElement
。
可以拍摄当前网页的自动化截图(我正在使用Firefox),请参见这里:Selenium WebDriver拍摄屏幕截图
知道要检查的页面元素的坐标。因此,截图图像可以裁剪到该大小和区域,并进行分析以检查查询是否返回true或false。
实现
在这种情况下,我并不局限于Java。 JavaScript 非常好,因为我也是用JQuery来进行其他查询的。性能很重要。我指望你了,我担心这是一项非常困难的任务。因此,我需要你的输入。
color
和background-color
可能会比较困难。透明度也不容易处理。你有什么建议如何处理这些问题吗? - Alpcolor
和background-color
作为回退的情况下,另一个缺点是:具有更高 z-index 的绝对定位元素会产生意外结果。你有看到任何解决方法吗? - Alp