2016-03-29 6 views
5

यहां परिदृश्य है।सेलेनियम प्राकृतिक तत्व और तत्व की चौड़ाई प्राप्त करते हैं। स्टाइल विशेषता पर भरोसा नहीं करना चाहिए। GetSize(), GetLocation() और getRect() ऐसा करने में विफल रहता है

छवि आईडी 'FlashID1x' के खिलाफ GetSize(), GetLocation() फ़ंक्शंस का उपयोग करते समय हमेशा 250,300 दे रहा है लेकिन तत्व की वास्तविक ऊंचाई और चौड़ाई 1 एक्स 1 है जो मूल रूप से गलत है।

<img id="FlashID1x" border="0" width="300" height="250" style="width:300px;height:250px;" alt="" src="http://s2.adform.net/Banners/invisible.gif?bv=2"/> 

यहाँ मेरी कोड है::

यहाँ मेरी लक्ष्य डोम है

System.out.println("total : "+iframe.size()); 
//driver.switchTo().frame(frame); 

org.openqa.selenium.Point point=driver.findElement(By.xpath(".//*[@id='FlashID1x']")).getLocation(); 
System.out.println("X Position : "+point.x); 
System.out.println("Y Position : "+point.y); 

System.out.println("X getX : "+point.getX()); 
System.out.println("Y gety : "+point.getY()); 

Rectangle pointer=driver.findElement(By.xpath(".//*[@id='FlashID1x']")).getRect(); 
System.out.println("height : "+pointer.hashCode(); 
System.out.println(" width : "+pointer.getWidth()); 

System.out.println("getHeight : "+pointer.getHeight()); 
System.out.println(" getWidth : "+pointer.getWidth()); 
+0

स्पष्ट करने के लिए, आप छवि को ही (1x1) के आकार पाने के लिए कोशिश कर रहे हैं या छवि (300x250) युक्त 'img' तत्व का आकार? –

+0

छवि का आकार –

+0

छवि का आकार प्राप्त करने का अंतिम लक्ष्य क्या है? –

उत्तर

5

GetSize विधि प्रस्तुत वेब तत्व आकार देता है न कि छवि का भौतिक आकार। अपने लक्ष्य आंतरिक अहो और वजन प्राप्त करने के लिए है, तो आप naturalWidth और naturalHeight गुण प्राप्त करने की कोशिश कर सकते:

WebDriver driver = new FirefoxDriver(); 
WebDriverWait wait = new WebDriverWait(driver, 20); 
driver.get("http://stackoverflow.com"); 

// get the intrinsic size with the getAttribute method 
WebElement ele = driver.findElement(By.cssSelector("img")); 
String naturalWidth = ele.getAttribute("naturalWidth"); 
String naturalHeight = ele.getAttribute("naturalHeight"); 

// get the intrinsic size with a piece of Javascript 
ArrayList result = (ArrayList)((JavascriptExecutor) driver).executeScript(
     "return [arguments[0].naturalWidth, arguments[0].naturalHeight];", ele); 
Long naturalWidth2 = (Long)result.get(0); 
Long naturalHeight2 = (Long)result.get(1); 
+0

धन्यवाद !! फ्लोरंट बी .. यह काम कर रहा है –

2

छवि को ही के आकार के बावजूद, यह WebDriver spec कि यह सीएसएस कि निर्धारित करता है है से बहुत स्पष्ट है <img> तत्व के आयाम, एक ही नियम हर दूसरे प्रकार के तत्व पर लागू होता है।

मुझे लगता है कि यह काफी उचित है। आपका मार्कअप स्पष्ट रूप से अंतर्निहित छवि से मेल नहीं खाता है, लेकिन संभवतः इसके लिए कुछ औचित्य है जिसे हम नहीं देख सकते हैं। चूंकि आपके तत्व के फुले हुए आकार का अन्य तत्वों की स्थिति पर असर पड़ता है, इसलिए यह केवल उचित है कि WebDriver को अपने स्थानों की सटीक रिपोर्ट करता है, यह दिखाते हुए कि वे एक छोटे से वर्ग के साथ अच्छी तरह से टकराए गए हैं।

आप समाधान की जरूरत है: उस URL पैटर्न या आईडी के लिए एक विशेष ओवरराइड के साथ एक getImageRect() विधि बना सकते हैं, आप स्टार्टअप पर वास्तविक छवि के आकार की जाँच करें और इसे कैश करने के लिए एक HTTP पुस्तकालय इस्तेमाल कर सकते हैं, या आप बस 1x1 हार्डकोड सकता है ।

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