2015-09-10 18 views
7

मेरे पास यह पृष्ठ है जहां टेक्स्टबॉक्स है और प्रत्येक टेक्स्ट बॉक्स से जुड़े बटन को बचाया गया है। मुझे सेव बटन पर क्लिक करना होगा ताकि वह टेक्स्ट बॉक्स में वैल्यू को सेव कर सके। यह मैन्युअल रूप से काम कर रहा है और सेलेनियम का उपयोग कर रहा है। लेकिन जब सेलेनियम वेबड्राइवर के माध्यम से चल रहा है तो यह टेक्स्ट बॉक्स मान को सहेज नहीं रहा है। लेकिन फेंकने में कोई त्रुटि अपवाद नहीं है। इनपुट, क्लिक काम कर रहा है। savetextvalue() को संक्षेप में ट्रिगर नहीं किया गया है। वहाँ समान मुद्दा Selenium click event does not trigger angularjs eventसेलेनियम क्लिक ईवेंट एंजुलरजेज़ को ट्रिगर नहीं करता है

<pp-save-control fn-save-text="saveText();" btn-class="btn btn-default btn-mtl" button-id="btnkbaemailauthsub" place-holder-text="" input-class="tb-mtl" input-id="txtkbaemailauthsub" config-name="40" title-text="KBA email authentication subject" outer-container-class="div-mtl-header" class="ng-isolate-scope"><div class="div-mtl-header"> 
    <span class="label-mtl ng-binding">KBA email authentication subject</span><img ng-hide="(isHelpHidden != null &amp;&amp; isHelpHidden != 'true') ? false : true" class="help-mtl ng-hide" src="/Images/help.png"> 
    <div class="div-mtl-tb-holder"> 
     <input type="text" placeholder="" class="tb-mtl" name="txtkbaemailauthsub" id="txtkbaemailauthsub"> 
     <button ng-click="saveTextValue();" ng-hide="false" class="btn btn-default btn-mtl btn-mtl-alignment" name="btnkbaemailauthsub" id="btnkbaemailauthsub" type="button">save</button> 
    </div> 
</div> 
</pp-save-control> 

एकाधिक पाठ बॉक्स और बटन को बचाने जुड़े रहे हैं है। 'Config-value' (आप शीर्ष पर देख सकते हैं) के आधार पर मूल्य सहेजा जा रहा है।

+0

आप JavascriptExecutor के साथ प्रयास किया था। इसके साथ प्रयास करें या बटन को अद्वितीय आईडी या एक्सपैथ साझा करें, इससे मदद मिलेगी –

+0

जावास्क्रिप्ट एक्स्सेलर के साथ भी प्रयास किया। – manutd

उत्तर

4

आपकी सुविधा के अनुसार लोकेटर बदलें

WebElement element= driver.findElement(By.id("btnkbaemailauthsub")); 

JavascriptExecutor executor = (JavascriptExecutor) driver; 
executor.executeScript("arguments[0].click();", element); 

या

JavascriptLibrary jsLib = new JavascriptLibrary(); 
jsLib.callEmbeddedSelenium(driver,"triggerMouseEventAt", element,"click", "0,0"); 

या

WebElement element= driver.findElement(By.id("btnkbaemailauthsub")); 
// Configure the Action 
Actions action = new Actions(driver); 

//Focus to element 
action.moveToElement(element).perform(); 

// To click on the element 
action.moveToElement(element).click().perform(); 

आशा है कि यह आप :)

में मदद मिलेगी मेरे पास वापस अगर जाओ अभी भी समस्या का सामना करना पड़ रहा है:)

+1

उत्तर के लिए धन्यवाद। इसे एक कोशिश की। यह काम नहीं कर रहा था। – manutd

+0

मैंने उत्तर द्वारा अद्यतन किया है। दूसरे विकल्प के साथ प्रयास करें जावास्क्रिप्ट लाइब्रेरी –

+0

यह काम नहीं कर सका :(समन्वय वेब तत्व के लिए सही है? वेब पेज पर नहीं? – manutd

1

अपने कार्यों के बीच wait डालने का प्रयास करें क्योंकि सेलेनियम को पता नहीं है कि कोणीय भार और काम कैसे करते हैं। प्रोटैक्टर को कोणीय वेब पृष्ठों को संभालने के उद्देश्य से सही बनाया गया था, जो सेलेनियम वेबड्राइवर पर एक रैपर है। हालांकि यदि आप अभी भी test angularjs with Selenium चाहते हैं तो प्रत्येक कार्रवाई के बीच कुछ सेकंड के लिए स्पष्ट रूप से या धाराप्रवाह प्रतीक्षा की प्रतीक्षा करें, आपको अपनी ज़रूरत के साथ मदद करनी चाहिए और जो भी आप चाहते हैं उसे पूरा कर सकते हैं। आशा करता हूँ की ये काम करेगा।

+0

+1। मैं जावास्क्रिप्ट समाधान के लिए नहीं गया था, क्योंकि यह वास्तविक उपयोगकर्ता इनपुट को दोहराना नहीं करता है।इसके अलावा, मैं सीएसएस चयनकर्ता 'बटन [ng-click = "func()"]' 'का उपयोग नहीं कर सका क्योंकि इससे मुझे 1 से अधिक परिणाम मिलेंगे। स्पष्ट इंतजार पर्याप्त नहीं थे। मेरा वर्तमान समाधान 1 सेकंड की एक implicity प्रतीक्षा जोड़ रहा है। हालांकि मैं सोच रहा हूं कि क्या इसे कम से कम किया जा सकता है। – Thibstars

2

सेलेनियम आईडीई कोशिश में: Webdriver साथ

<td>sendKeysAndWait</td> 
<td>id=mybutton</td> 
<td>${KEY_ENTER}</td> 

ही:

WebElement element_p = (new WebDriverWait(_driver, 3)) 
      .until(ExpectedConditions.visibilityOfElementLocated(By 
        .id("myButton"))); 
element_p.sendKeys(Keys.RETURN); 
+0

शानदार! तत्व को वास्तविक कुंजी भेजना हल हो गया। – Maritim

1
driver = webdriver.Chrome('/path to /webdriver 22'); 
driver.find_element_by_css_selector('button[ng-click="func()"]'); 
संबंधित मुद्दे