2013-05-19 17 views
5

बदलें मैं अपने जावा प्रोजेक्ट में HtmlUnit का उपयोग कर रहा हूं ताकि वेब पेज का परीक्षण किया जा सके जिसमें जावास्क्रिप्ट हो। मेरा कोड एक बटन पर क्लिक करता है जो जावास्क्रिप्ट फ़ंक्शन को कॉल करता है, जो उपयोगकर्ता को किसी अन्य पृष्ठ पर रीडायरेक्ट करता है (जैसे लिंक शॉर्टनर सेवाएं)।HTMLUnit: उपयोगकर्ता एजेंट स्ट्रिंग

public void click() 
{ 
    WebClient webClient = new WebClient(); 
    HtmlPage page = webClient.getPage("http://mywebsite.com"); 
    HtmlImage a = page.getHtmlElementById("my_button"); 
    page = (HtmlPage) a.click(); 
} 

समस्या यह है कि HTMLUnit डिफ़ॉल्ट उपयोगकर्ता एजेंट (इंटरनेट एक्सप्लोरर 8) का उपयोग करता है और वहाँ एक ही सेट करने के लिए (फ़ायरफ़ॉक्स 17 और क्रोम) कुछ हैं: यह कोड है। Mywebsite.com का व्यवहार तब नहीं बदलता है जब यह किसी अन्य ब्राउज़र/उपयोगकर्ता एजेंट का पता लगाता है। वैसे, उपयोगकर्ता एजेंट स्ट्रिंग को सांख्यिकीय उद्देश्यों के लिए वेबसाइट द्वारा संग्रहीत किया जाता है और जब भी मैं इसे देखता हूं तो इसे बदलने की आवश्यकता होती है।

मैं इस तरह से एक नया BrowserVersion वस्तु बनाने के द्वारा उपयोगकर्ता एजेंट बदलने के लिए कोशिश की है:

BrowserVersion bv = new BrowserVersion("Chrome", "Mozilla/5.0", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 28); 

वैसे, जब मैं एक Webclient वस्तु का दृष्टांत मेरी bv वस्तु गुजर, मेरे कोड ऐसा नहीं करता अब और काम करो जो मैंने समझा है, उससे HtmlUnit प्रलेखन कहता है कि मुझे यह जांचना है कि क्या मेरे ब्राउज़र वर्जन में निर्दिष्ट उपयोगकर्ता एजेंट जावास्क्रिप्ट चलाने के लिए उचित सुविधाएं हैं।

हालांकि, ध्यान दें कि स्थिरांक पूरी तरह से ब्राउज़र को अनुकूलित करने के लिए पर्याप्त नहीं हैं, तो आप भी BrowserVersionFeatures और वर्गों "जावास्क्रिप्ट" पैकेज के अंदर इस पर गौर करने की जरूरत है।

इसका क्या अर्थ है? क्यों HtmlUnit अब काम नहीं करता है? मेरा लक्ष्य केवल उपयोगकर्ता एजेंट स्ट्रिंग को बदलने के लिए है। इसे कैसे प्राप्त किया जा सकता है? ध्यान दें कि मैंने बिना सफलता के सेलेनियम की भी कोशिश की है। आपकी मदद के लिए धन्यवाद।

संपादित करें 1:

मिले इस चाल। यदि मैं ब्राउजरवर्सन को निम्नलिखित के रूप में तत्काल करता हूं:

BrowserVersion bv = new BrowserVersion("Netscape", "blablabla", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 0); 

यह काम करता है, लेकिन मुझे समझ में नहीं आता है। मुझे नेटस्केप के रूप में पहली स्ट्रिंग सेट करनी है (क्रोम और मोज़िला की कोशिश की लेकिन यह काम नहीं करता है)। दूसरी स्ट्रिंग यादृच्छिक है, अगर नेटस्केप को पहले पैरामीटर के रूप में सेट किया गया है तो मैं कुछ भी डाल सकता हूं। तीसरी स्ट्रिंग अच्छी तरह से स्वरूपित उपयोगकर्ता एजेंट है और चौथा पैरामीटर संस्करण को इंगित करने वाला एक पूर्णांक है। क्या आप मुझे समझा सकते हैं कि यह केवल तभी काम करता है जब Netscape को पहले पैरामीटर के रूप में पारित किया जाता है और दूसरों के लिए यादृच्छिक (दूसरे को छोड़कर)?

अद्यतन:

कभी कभी यह (जैसा ऊपर वर्णित) काम नहीं करता। कुछ उपयोगकर्ता एजेंट तारों के लिए, पृष्ठ सही ढंग से लोड नहीं हो रहा है। मुझे समझ में नहीं आ रहा है कि क्यों उपयोगकर्ता एजेंट को HtmlUnit के व्यवहार को संशोधित करना चाहिए क्योंकि मुझे पूरा यकीन है कि जावास्क्रिप्ट यह काफी आसान है और सभी ब्राउज़र संस्करणों द्वारा चलाया जाना चाहिए। तो, मेरे अंतिम प्रश्न है: मैं जावास्क्रिप्ट को निष्पादित करते समय अपने व्यवहार को बदलने के बिना HtmlUnit में उपयोगकर्ता एजेंट स्ट्रिंग को कैसे बदल सकता हूं?

उत्तर

0

पाया एक नया BrowserVersion वस्तु बनाने के बारे में चिंता मत करो।आप सभी संस्करण गंदगी के साथ खिलवाड़ के बिना ड्राइवर बनाने के बाद उपयोगकर्ता एजेंट बदल सकते हैं:

String DEFAULT_MOBILE_USER_AGENT_STRING = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"; 

HtmlUnitDriver driver = new HtmlUnitDriver(); //Or insert a capabilities object 
driver.getBrowserVersion().setUserAgent(DEFAULT_MOBILE_USER_AGENT_STRING); 
driver.get("http://facebook.com"); 

यह सही ढंग से http://facebook.com का दौरा करेंगे और https://m.facebook.com/?_rdr&refsrc=https://www.facebook.com/ पर पुनः निर्देशित हो क्योंकि उपयोगकर्ता एजेंट स्ट्रिंग बताता फेसबुक ब्राउज़र एक iPhone है।

+0

इस उदाहरण यह सेलेनियम से संबंधित नहीं है की तरह सेट कर सकते हैं? मैं HTMLUnit [यहां] के बारे में बात कर रहा हूं (http://htmlunit.sourceforge.net) – Angelo

0

Htmlunit 2.28 का उपयोग करते हुए आप इसे नीचे

final BrowserVersion myChrome = new BrowserVersion.BrowserVersionBuilder(BrowserVersion.CHROME) 
    // do your setup here 
    .setXXX(..) 
    .build(); 
संबंधित मुद्दे