2012-12-06 109 views
8

真的看到我想檢查用戶是否可以看到當前Web瀏覽器中的某個元素而無需滾動。檢查元素是否給用戶

什麼我發現可以檢查元素是否是某個頁面上的。

另一個提示建議檢查元素的位置,但後來我需要得到瀏覽器加上可視窗口的X/Y的偏移0/0尺寸。

我將不勝感激,如果有人可以指向我並不需要JavaScript代碼的解決方案。

+2

不幸的是,沒有JavaScript沒有辦法。無論如何,你爲什麼不想要那個?從[這裏](http://stackoverflow.com/questions/704758/how-to-check-if-an-element-is-really-visible-with-javascript)有什麼幫助嗎? –

+0

@Slanec例如,我有其中由於一些差CSS,需要被點擊的按鈕被定位,例如,在視口的110%的寬度的一個錯誤,並且溢出被設置爲隱藏。所以這個按鈕永遠不會是clickbale,而不是滾動或調整大小或任何東西。順便說一下,這隻發生在IE11中。所以現在我想要一個測試用例來驗證該按鈕是否可見,以添加到產品的迴歸中。不幸的是,isDisplayed()對於該元素是真實的。 – dmansfield

+0

我正在使用Css,Z-index檢查元素的可見性。我是否可以檢查元素的可見性,在另一個元素的背層中。 – bcrajkumar

回答

2

你如何定義「用戶可見」?你打算如何檢查它? 如果它有一個高度?如果它沒有被CSS隱藏?如果它的父元素被CSS隱藏了呢?

最可靠的方法是使用Selenium內建的.Displayed屬性(如果您使用的是C#,Java有類似),並將其與jQuery的「可見」選擇器相結合:http://api.jquery.com/visible-selector/。下面的例子,在C#中。

var element = Driver.FindElement(By.Id("test")); 
bool isVisible = element.Displayed; 
var javascriptCapableDriver = (IJavascriptExecutor)Driver; 
bool jQueryBelivesElementIsVisible = javascriptCapableDriver.ExecuteScript("return $('#myElement').is(:visible);"); 
bool elementIsVisible = isVisible && jQueryBelievesElementIsVisible; 

這會得到大多數情況。

這也不是沒有可能客戶端代碼,或在別人找到一個方式,它可以在服務器端語言來完成的準備,我很懷疑這將是非常,可讀或可靠。

jQuery的有offset()方法:

http://api.jquery.com/offset/

然而,這將不考慮邊框,邊距,那種東西的時候工作。

+1

我會定義** visible **,因爲元素在視圖端口中,而不是被前面的其他元素隱藏。 – Cani

+0

@Cani這真的應該是可行的,'click()'方法恰好在這些情況下產生一個異常(消息「Element <>在點(546,18)不可點擊」,其他元素將接收到click: <>「)。我只是不知道如何做到這一點,而不會實際觸發點擊,如果它是可見的... – Izkata