2017-06-03 8 views
5

फ़ायरफ़ॉक्स पर, browser.keys त्रुटि फेंक रहा है।browser.keys() फ़ायरफ़ॉक्स 53.0 और webdriver.io पर काम नहीं कर रहा है

 
Os: MacOs 
Firefox version: 53.0.3 
Geckodriver: 0.16.1 
Webdriver.io: 4.8 

कृपया इस त्रुटि से निपटने के लिए मेरी सहायता करें।

यहाँ लॉग

 
[17:11:35] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/url" 
[17:11:41] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/refresh" 
[17:11:45] COMMAND GET  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/window/current/size" 
[17:11:46] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/elements" 
[17:11:46] COMMAND GET  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/element/0/displayed" 
[17:11:46] COMMAND GET  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/element/1/displayed" 
[17:11:46] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/elements" 
[17:11:46] COMMAND GET  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/element/0/displayed" 
[17:11:46] COMMAND GET  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/element/1/displayed" 
[17:11:46] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/elements" 
[17:11:47] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/element/0/value" 
WARNING: the "keys" command will be depcrecated soon. Please use a different command in order to avoid failures in your test after updating WebdriverIO. 
[17:11:47] COMMAND POST  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/keys" 
[17:11:47] COMMAND GET  "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/screenshot" 
[17:11:48]  Saved screenshot: ERROR_firefox_2017-06-03T00-11-47.734Z.png 
[17:11:48] COMMAND DELETE "/wd/hub/session/97804a03-d52a-4232-9e3c-41e1fac6a9c5/cookie" 
Error: sendKeysToActiveElement 
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' 
System info: host: 'xxx.local', ip: '10.142.4.252', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.5', java.version: '1.8.0_131' 
Driver info: driver.version: RemoteWebDriver 
Error: The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource. 
    at Object.wait (/Users/xxxx/c3web/xxxx/node_modules/fibers/future.js:449:15) 
    at Object.keys (/Users/xxxxx/node_modules/wdio-sync/build/index.js:264:31) 
    at Object.exports.customCommands.selector (/Users/xxx/c3web/xxxx/testlib/browser/customCommands.js:158:17) 
    at /Users/xxxx/node_modules/wdio-sync/build/index.js:191:29 
    - - - - - 
    at keys("Enter") - index.js:244:37 
    at elementIdValue("0", "xxxyyyzzz") - index.js:293:3 
+0

LookAtSrc, क्या आप इस प्रश्न के साथ निष्कर्ष पर आए? अगर मेरे उत्तर ने इस मुद्दे को मंजूरी दे दी है, तो उत्तर (अपवोट/डाउनवोट के बगल में हरे रंग की जांच) को स्वीकृति दें। – iamdanchiv

उत्तर

8

जैसा कि @iamdanchiv ने अपने उत्तर में उल्लेख किया है, browser.keys() को हटा दिया जाएगा, लेकिन एक कामकाज है (और मुझे इसके लिए पीआर जमा करना चाहिए)।

क्या browser.keys() हुड के तहत है /session/:sessionId/keys वेबड्राइवर जेसनवायर प्रोटोकॉल में एंडपॉइंट को कॉल करना है। हालांकि, यदि आप डब्ल्यू 3 सी वेबड्राइवर के विनिर्देशन में list of endpoints देखते हैं, तो यह एंडपॉइंट सूची में नहीं है। मेरा मानना ​​है कि यह पहले सूची का हिस्सा था, लेकिन इसे छोड़ दिया गया है। इसके बजाय, कुंजी भेजने के लिए, विनिर्देशन /session/:sessionId/element/:elementId/value एंडपॉइंट का उपयोग करने के लिए कहता है, जिसे आप कॉल करने के लिए वेबड्राइवरियो browser.elementIdValue(ID, value) विधि का उपयोग कर सकते हैं।

अब, यदि आप /session/:sessionId/keys के विनिर्देशों पर Selenium's documentation on the JsonWireProtocol में उल्लिखित विनिर्देशों पर पढ़ते हैं तो अन्य वेबड्राइवर कार्यक्षमताओं का उपयोग करके कार्यान्वयन को दोहराना बहुत आसान है। /session/:sessionId/keys endpoint बस इस करता है:

सक्रिय तत्व के लिए एक दृश्य की स्ट्रोक भेजता है।

कि समाप्ति बिंदु हम मौजूदा सक्रिय तत्व है, जो /session/:sessionId/element/active है, जो webdriverio के browser.elementActive() विधि को मैप किया है हड़पने के लिए कॉल कर सकते हैं नहीं है।

इस तरह, हमें यह करना है कि browser.keys() को फिर से कार्यान्वित करना है सक्रिय तत्व क्या है, फिर उस तत्व को कुंजी भेजें।

तो इस समाधान का समाधान है, अगर आप भेजने के लिए browser.keys("hello world") चाहता था:

var result = browser.elementActive(); 
var activeElement = result.value && result.value.ELEMENT; 
if(activeElement){ 
    browser.elementIdValue(activeElement, "hello world"); 
} 

नोट यह है कि वास्तव में /session/:sessionId/keys के व्यवहार की नकल कर नहीं करता है, जो भी इस सेलेनियम के दस्तावेज़ के अनुसार करता है:

यह आदेश निहित समाप्ति को छोड़कर प्रत्येक पहलू में प्रेषण कुंजी आदेश के समान है: कॉल के अंत में संशोधक जारी नहीं किए जाते हैं। इसके बजाय, संशोधक कुंजी की स्थिति कॉल के बीच रखी जाती है, इसलिए संशोधक कुंजी उदासीन होने पर माउस इंटरैक्शन का प्रदर्शन किया जा सकता है।

ऊपर समाधान परोक्ष ऐसी कुंजी क्रम की अंत में "बदलाव", "CTRL" के रूप में संशोधक कुंजियों जारी है। तो यदि आप एक कुंजी पकड़ना चाहते हैं और माउस इंटरैक्शन करना चाहते हैं, तो कठिन भाग्य दोस्त, शायद हमें वेबड्राइवर एक्शन एपीआई को लागू करने के लिए ब्राउज़र का इंतजार करना होगा। लेकिन अगर तुम सब करना चाहता था "CTRL" + "सी" भेजने के लिए है, तो आप सिर्फ चाबियों का एक सरणी इस तरह भेज सकते हैं:

var result = browser.elementActive(); 
var activeElement = result.value && result.value.ELEMENT; 
if(activeElement){ 
    browser.elementIdValue(activeElement, ["CTRL", "c"]); 
} 
0

खैर कर रहे हैं, कि त्रुटि काफी बताते keys आदेश के कार्यान्वयन के साथ एक मुद्दा है कि वहाँ: WARNING: the "keys" command will be depcrecated soon. Please use a different command in order to avoid failures in your test after updating WebdriverIO.

वर्तमान में यह केवल मेरे परीक्षण मामलों में chromedriver के साथ काम कर रहा है, लेकिन मैं इसके साथ श्रृंखला कमांड करने में भी सक्षम नहीं हूं। (अनुकरण Ctrl+C, Ctrl+V)।

this पर मेरा उत्तर देखें। आपको इसके चारों ओर जाने के लिए एक और तरीका ढूंढना होगा, या नए सेलेनियम actions विधियों को लागू करने के लिए ड्राइवरों (क्रोमरेड्रिवर, geckodriver इत्यादि) के लिए प्रतीक्षा करें।

मैंने जो उत्तर दिया वह पूरे मुद्दे को काफी अधिक कवर करता है। वैकल्पिक रूप से, आप codepoint दृष्टिकोण: browser.keys("\uE007") आज़मा सकते हैं।

उम्मीद है कि यह आपकी मदद करता है!

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