2012-09-11 10 views
15

मैं Google ड्राइव में अपलोड फ़ाइल कार्यक्षमता स्वचालित करने की कोशिश कर रहा हूं।सेलेनियम वेबड्राइवर - छुपे तत्वों पर क्लिक करें

पैरामीटर पास करने के लिए प्रयुक्त तत्व ऊंचाई - 0px के साथ छिपा हुआ है।

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

<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/> 

ऊपर तत्व के लिए xpath है -

//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input 

मैं

WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>) 

अपवाद उपयोग कर रहा हूँ -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme एनटी वर्तमान में दिखाई नहीं दे रहा है और इसलिए इसके साथ बातचीत नहीं की जा सकती है।

मैंने जावास्क्रिप्ट एक्स्सेलर का उपयोग करने का प्रयास किया है। लेकिन सटीक वाक्यविन्यास खोजने में असमर्थ।

+0

एचटीएमएल पर एक नजर डालें, तो Google डिस्क सिर्फ एक रूप है? यदि ऐसा है, तो सेलेनियम का उपयोग न करें, केवल आपके द्वारा निर्दिष्ट डेटा के साथ फ़ॉर्म पोस्ट करने के लिए एक स्क्रिप्ट लिखें। – jasop

उत्तर

18

इस प्रयास करें:

WebElement elem = yourWebDriverInstance.findElement(By.xpath("//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input")); 
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';"; 

((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem); 

ऊपर गुच्छा अपनी फ़ाइल इनपुट नियंत्रण की दृश्यता बदल जाएगा।

elem.sendKeys("<LOCAL FILE PATH>"); 

ध्यान रखें, एक इनपुट फ़ील्ड आप परीक्षण के अंतर्गत आवेदन के साथ दखल कर रहे हैं की दृश्यता को बदलने के द्वारा: आप फिर अपलोड की तरह फ़ाइल के लिए सामान्य चरणों के साथ आगे बढ़ सकते हैं। व्यवहार को बदलने के लिए स्क्रिप्ट इंजेक्शन करना घुसपैठ कर रहा है और परीक्षणों में अनुशंसित नहीं है।

+0

पूरी तरह से ठीक काम करता है !! – praneel

2

इस नमूना कोड का प्रयास करें:

JavascriptExecutor executor= (JavascriptExecutor)driver; 
executor.executeScript("document.getElementById('ID').style.display='block';"); 
Select select = new Select(driver.findElement(By.id("ID"))); 
select.selectByVisibleText("value"); 
Thread.sleep(6000); 

जावा स्क्रिप्ट प्रबंधक का उपयोग करके और तत्व दिखाई तो आईडी के माध्यम से तत्व पर क्लिक करें। आशा है कि यह hepls ..

0

इस प्रयास करें:

WebElement elem = yourWebDriverInstance.findElement(
    By.cssSelector(".uploadmenu > input")); 
String js = 
    "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';"; 
((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem); 

यहाँ मैं CSS चयनकर्ता द्वारा XPath जगह ले ली है। मुझे बताएं उपर्युक्त स्क्रिप्टिंग काम कर रही है या नहीं।

0

आप निम्न आजमाइए कर सकते हैं:

((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();"); 
6

सरल समाधान यहाँ जाता है,

WebElement tmpElement= driver.finElement(ElementLocator); 
JavascriptExecutor executor = JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", tmpElement); 
संबंधित मुद्दे