我正在编写一个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
最好的选择是使用color
和background-color
等CSS属性。但是这些不考虑图像,这是良好的颜色查询所需要的。此外,由于css选择器继承和透明度的处理,它们可能会产生困难。此外,在当前元素之上具有更高z-index
的绝对定位元素可能会产生意外结果。
给出要检查的网页元素。它在JavaScript驱动程序的Java绑定中表示为JavaScript DOM元素(或JQuery对象)或RemoteWebElement
。
可以自动获取网页当前状态的屏幕截图(我正在使用Firefox),请参见此处:Take a screenshot with Selenium WebDriver
要检查的页面元素的坐标是已知的。因此,截图图像可以裁剪为该大小和区域,并以某种方式进行分析,以检查查询是返回true还是false。
在这种情况下,我不仅限于Java。 JavaScript 非常好,因为我也在JQuery的帮助下进行其他查询。表现很重要。我指望着你,我担心这是一项非常艰巨的任务。因此我需要你的意见。
答案 0 :(得分:2)
最简单的方法:
如果你真的想使用JavaScript
如果元素是IMG或具有背景图像CSS,则仅执行上述操作。只需使用颜色和背景颜色的CSS检查。