2012-12-06 8 views
8

पर दिखाई देता है, तो मैं यह जांचना चाहता हूं कि उपयोगकर्ता स्क्रॉल किए बिना वर्तमान वेब ब्राउज़र दृश्य में कोई तत्व देख सकता है या नहीं।जांच रहा है कि कोई तत्व वास्तव में उपयोगकर्ता को

जो मैंने पाया है वह यह जांच सकता है कि तत्व पृष्ठ पर कहीं कहीं है या नहीं।

एक अन्य संकेत तत्वों स्थिति की जांच करने का सुझाव दिया है लेकिन फिर मैं ब्राउज़र के दृश्य खिड़की प्लस अपने x/y के आयामों 0/0 को ऑफसेट पाने के लिए की आवश्यकता होगी।

अगर कोई मुझे ऐसे समाधान पर इंगित कर सकता है जो जावास्क्रिप्ट कोड की आवश्यकता नहीं है तो मैं आभारी रहूंगा।

+2

दुर्भाग्य से, जावास्क्रिप्ट के बिना कोई रास्ता नहीं। आप उसे क्यों नहीं चाहते हैं, वैसे भी? [यहां] से कुछ भी है (http://stackoverflow.com/questions/704758/how-to-check-if-an-element-is-really-visible-with-javascript) मदद? –

+0

@Slanec उदाहरण के लिए, मेरे पास एक बग है जहां कुछ खराब सीएसएस के कारण, एक बटन जिसे क्लिक करने की आवश्यकता है, उदाहरण के लिए 110% चौड़ाई व्यूपोर्ट पर है, और अतिप्रवाह छिपाने के लिए सेट है। तो बटन कभी भी क्लिकबेल नहीं होगा, स्क्रॉलिंग या आकार बदलने या कुछ भी नहीं। यह केवल आईई 11 में ही होता है। तो अब मैं एक परीक्षण केस चाहता हूं कि यह सत्यापित करने के लिए कि बटन उत्पाद के लिए प्रतिगमन में जोड़ने के लिए दृश्यमान है। दुर्भाग्य से, isDisplayed() तत्व के लिए सच है। – dmansfield

+0

मैं सीएसएस, जेड-इंडेक्स का उपयोग करके किसी तत्व की दृश्यता की जांच कर रहा हूं। मैं किसी अन्य तत्व की पिछली परत में, तत्व की दृश्यता की जांच कर सकता हूं। – bcrajkumar

उत्तर

2

आप 'उपयोगकर्ता को दृश्यमान' कैसे परिभाषित करते हैं? आप इसे जांचने का प्रस्ताव कैसे देते हैं? यदि इसकी ऊंचाई है? अगर यह सीएसएस द्वारा छुपा नहीं है? क्या होगा यदि यह मूल तत्व सीएसएस द्वारा छिपा हुआ है?

सबसे विश्वसनीय तरीका सेलेनियम का उपयोग .Displayed संपत्ति (यदि आप सी # का उपयोग कर रहे हैं, जावा में कुछ समान है) का उपयोग करना होगा, और इसे jQuery के 'दृश्यमान' चयनकर्ता के साथ संयोजित करें: http://api.jquery.com/visible-selector/। सी # में नीचे उदाहरण।

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; 

इससे अधिकांश मामलों में मिल जाएगा।

क्लाइंट साइड कोड के बिना यह संभव नहीं है, या तैयारी में किसी और को यह पता चलता है कि यह सर्वर साइड भाषा में किया जा सकता है, मुझे संदेह है कि यह सुंदर, पठनीय या भरोसेमंद होगा।

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

यह, तथापि, जब खाता सीमाओं, मार्जिन, सामान उस तरह ध्यान में रखकर काम नहीं करेगा:

jQuery offset() विधि है।

+1

मैं ** दृश्य ** को परिभाषित करता हूं क्योंकि तत्व दृश्य पोर्ट में है और इसके सामने अन्य तत्वों द्वारा छुपाया नहीं गया है। – Cani

+0

@Cani यह वास्तव में करने योग्य होना चाहिए, 'क्लिक()' विधि वास्तव में उन परिस्थितियों में एक अपवाद उठाती है (संदेश "तत्व <> बिंदु पर क्लिक करने योग्य नहीं है (546, 18)। अन्य तत्व क्लिक प्राप्त होगा: <> ")। मैं बस यह समझ नहीं सकता कि वास्तव में एक क्लिक को ट्रिगर किए बिना इसे कैसे किया जा सकता है यदि यह दिखाई दे रहा है ... – Izkata

संबंधित मुद्दे