2008-09-18 13 views
7

मैं यह पता लगाने की प्रोग्राम के रूप में एक वेब पेज पर एक बटन क्लिक करने के लिए कैसे कोशिश कर रहा हूँ।प्रोग्रामिंग के अनुसार ASP.NET वेब पेज पर एक बटन को कैसे क्लिक करें?

विशेष रूप से, मैं एक WebBrowser नियंत्रण के साथ एक WinForm है। एक बार जब यह लक्ष्य ASP.NET प्रवेश पृष्ठ मैं के साथ काम करने की कोशिश कर रहा हूँ, DocumentCompleted ईवेंट हैंडलर में संचालन करता रहा निम्न कोडेड है

HtmlDocument doc = webBrowser1.Document; 

HtmlElement userID = doc.GetElementById("userIDTextBox"); 
userID.InnerText = "user1"; 

HtmlElement password = doc.GetElementById("userPasswordTextBox"); 
password.InnerText = "password"; 

HtmlElement button = doc.GetElementById("logonButton"); 
button.RaiseEvent("onclick"); 

इस उपयोगकर्ता आईडी और पासवर्ड पाठ बॉक्स ठीक भरता है, लेकिन मैं कर रहा हूँ क्लिक करने के लिए उस धूमिल बटन को प्राप्त करने में कोई सफलता नहीं है; मैंने "क्लिक", "क्लिक करें" और "ऑनक्लिक" भी कोशिश की है - और क्या है? पाठ्यक्रम के एमएसडीएन की एक खोज मुझे कोई संकेत नहीं देता है, न ही groups.google.com। मुझे करीब होना चाहिए। या शायद नहीं - किसी ने मुझे बताया कि मुझे पृष्ठ की पोस्ट विधि को कॉल करना चाहिए, लेकिन यह कैसे किया जाता है, यह सलाह का हिस्सा नहीं था।

BTW बटन कोडित है:

<input type="submit" name="logonButton" value="Login" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="logonButton" tabindex="4" /> 
+0

(http://www.webtropy.com/articles/InternetExplorer.asp?Internet%20explorer) अलग रूप तत्वों के साथ बातचीत करने के लिए WebBrowser नियंत्रण (.NET 2.0) का उपयोग कर के लिए [यहाँ एक अच्छा संदर्भ है]। –

उत्तर

8

कैसे काम करता है? काम करता है मुझे

HtmlDocument doc = webBrowser1.Document; 

doc.All["userIDTextBox"].SetAttribute("Value", "user1"); 
doc.All["userPasswordTextBox"].SetAttribute("Value", "Password!"); 
doc.All["logonButton"].InvokeMember("Click"); 
1

आप कोशिश करते हैं और Page_ClientValidate() विधि सीधे clientscript के माध्यम से के बजाय आह्वान बटन पर क्लिक के कर सकते हैं, मुझे एक उदाहरण की खुदाई करते हैं।

MSHTML

का उपयोग
mshtml.IHTMLWindow2 myBroserWindow = (mshtml.IHTMLWindow2)MyWebBrowser.Document.Window.DomWindow; 
myBroserWindow.execScript("Page_ClientValidate();", "javascript"); 
+0

यह एक समस्या हो सकती है यदि लॉगिन पृष्ठ विशेष रूप से बटन –

+0

पर क्लिक करने के लिए देखता है, तो मैंने सच सोचा था, लेकिन मैंने फैसला किया कि मैं इनवॉक विधि को वैसे भी फेंक दूंगा। –

6

वर btn = document.getElementById (btnName); अगर (बीटीएन) btn.click();

+0

यह बहुत अच्छा है अगर यह क्लाइंट स्क्रिप्ट की ज़रूरत है, लेकिन मैं जो करने की कोशिश कर रहा हूं वह सर्वर की तरफ है। – Cyberherbalist

1

क्या आपने RaiseEvent के बजाय fireEvent की कोशिश की है?

1

आप सीधे विधि कॉल और सामान्य वस्तु और EventArgs पैरामीटर पास कर सकता है। बेशक, यह काम नहीं कर सकता है अगर आप विशिष्ट डेटा के लिए प्रेषक और EventArgs मानकों को देख रहे थे। मैं आमतौर पर इसे कैसे संभालता हूं, विधि के गलतियों को दोबारा क्रिया() विधि में रीफैक्टर करना है और बटन क्लिक के लिए इवेंट हैंडलर बस इस फ़ंक्शन को कॉल करेगा। इस तरह मुझे यह पता लगाने की ज़रूरत नहीं है कि पेज/फॉर्म पर कुछ तर्क करने के लिए आमतौर पर केवल एक ईवेंट हैंडलर क्या होता है।

जावास्क्रिप्ट के किसी फॉर्म पोस्ट के लिए बटन पर क्लिक करने के मामले में, आप क्लाइंट साइड स्क्रिप्ट में form.submit() को आमंत्रित कर सकते हैं - जो टैग में परिभाषित आपकी सत्यापन स्क्रिप्ट को चलाएगा - और फिर Form_Load को पार्स करें घटना और उस फॉर्म पर सबमिट बटन के टेक्स्ट वैल्यू को पकड़ें (माना जाता है कि केवल एक ही है) - कम से कम वह एएसपी.नेट 1.1 तरीका है जिसके साथ मैं बहुत परिचित हूं ... किसी को भी 2.0+ के साथ कुछ और सुरुचिपूर्ण पता है ?

0

आप @ Phunchak के जवाब पर एक ग्राहक साइड स्क्रिप्ट का उपयोग करना चाहते नहीं की तर्ज पर एक टिप्पणी पोस्ट। मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं वह असंभव है। फ़ॉर्म के साथ बातचीत करने का एकमात्र तरीका क्लाइंट साइड स्क्रिप्ट के माध्यम से है। सी # कोड केवल ब्राउज़र को पृष्ठ पर भेजने से पहले क्या होता है इसे नियंत्रित कर सकता है।

0

कोशिश के लिए इस button.focus System.Windows.Forms.SendKeys.Send ("{ENTER}")

1

बस एक संभव उपयोगी अतिरिक्त जहां सबमिट बटन पर नहीं दिया गया है एक आईडी - जैसा अक्सर मामला होता है।

private HtmlElement GetInputElement(string name, HtmlDocument doc) { 
      HtmlElementCollection elems = doc.GetElementsByTagName("input"); 

      foreach (HtmlElement elem in elems) 
      { 
       String nameStr = elem.GetAttribute("value"); 
       if (!String.IsNullOrEmpty (nameStr) && nameStr.Equals (name)) 
       { 
        return elem; 
       } 
      } 
      return null; 
    } 

तो तुम यह इतना की तरह कॉल कर सकते हैं:

GetInputElement("Login", webBrowser1.Document).InvokeMember("Click"); 

यह अगर मान 'लॉग इन' के साथ इनपुट प्रस्तुत एक अपवाद बढ़ा देंगे, लेकिन आप इसे तोड़ सकते हैं अप अगर आप सशर्त करना चाहते हैं क्लिक का आह्वान करने से पहले जांचें।

+1

मुझे नियंत्रण दस्तावेज को स्वीकार करने के लिए थोड़ी सी शरारती और फिर से झुका हुआ महसूस हुआ ताकि यह एक सामान्य कार्य हो। – MonsCamus

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