2014-04-04 13 views
7

में वर्तमान कर्सर स्थिति वहाँ इस तरह वर्तमान कर्सर स्थिति या कुछ और दिखाने के लिए एक तरीका है? मेरे पास एक्शन चेन है जो किसी ऑब्जेक्ट पर सटीक बिंदु पर क्लिक करनी चाहिए लेकिन मुझे लगता है कि मैंने गलत निर्देशांक उठाए हैं। मैं फ़ायरफ़ॉक्स वेबड्राइवर का उपयोग करता हूं।दिखाएँ सेलेनियम

from selenium import webdriver 
import time 
from selenium.webdriver.common.action_chains import ActionChains 

driver = webdriver.Firefox() 
driver.get("http://www.mysite/") 
elem = driver.find_element_by_xpath('//div[@id="player"][1]/object[@type="application/x-shockwave-flash"]') 
action_chains = ActionChains(driver) 
action_chains.move_to_element_with_offset(elem, 660, 420).perform() 
action_chains.click().perform() 
time.sleep(10) 
driver.close() 
+1

यह करने का एक बहुत बुरा तरीका है। आप सबसे अधिक संभावना एक और ब्राउज़र/कंप्यूटर/आदि के लिए आप बंदरगाह के रूप में जैसे ही समस्याओं भर में आ जाएगा यह वहाँ लगभग हमेशा माउस का उपयोग किए बिना एक ग्राहक कार्रवाई करने के लिए एक तरीका है, और भले ही वह एक ही रास्ता है, वहाँ अभी भी एक होना चाहिए कर्सर की स्थिति का उपयोग किये बिना इसे करने का तरीका। यदि यह एकमात्र तरीका था, तो आप केवल तत्व पर क्लिक करने में सक्षम होंगे जब ब्राउज़र विंडो किसी विशिष्ट आकार पर सेट की गई थी। आप वेबसाइट है कि आप आप पहुँचने का प्रयास कर रहे हैं उसका URL प्रदान करते हैं, तो मैं तुम्हें प्राप्त करने के लिए आप क्या कोशिश कर रहे हैं ... अपनी टिप्पणी के लिए –

+0

@barakmanos धन्यवाद के लिए एक बेहतर तरीका खोजने के लिए सक्षम हो सकता है। दुर्भाग्य से, पृष्ठ पर उस ऑब्जेक्ट के साथ काम करने के लिए मेरे पास कोई और तरीका नहीं है। उदाहरण के लिए, मान लें कि मैं वीडियो शुरू करना चाहता हूं और http://www.jwplayer.com/ पर अपना संकल्प बदलना चाहता हूं लेकिन इसके एपीआई का उपयोग किए बिना। –

+0

मैं बराक से सहमत Manos कि सामान्य स्थिति में आप यह करने के लिए नहीं करना चाहते हैं, लेकिन मुझे लगता है कि आप एक फ़्लैश प्लेयर के लिए क्लिक करने के लिए कोशिश कर रहे हैं। मैं किसी भी समाधान है कि नियंत्रित * केवल * ब्राउज़र (सेलेनियम की तरह) द्वारा संचालित है कि इस परीक्षण करने निर्देशांकों का उपयोग पर निर्भर नहीं होगा के बारे में पता नहीं है। हालांकि, हो सकता है कि फ्लैश के लिए डिज़ाइन किए गए परीक्षण समाधान हैं जो सेलेनियम जैसे फ़्लैश तत्वों को ढूंढने में सक्षम होंगे, जो डोम तत्व ढूंढ सकते हैं? – Louis

उत्तर

0

मैं संकल्प को बदलने सीधे रूप में हम इस बात के लिए किसी भी लोकेटर उपयोग नहीं कर सकते के लिए किसी भी संभावित तरीकों नहीं दिख रहा है: यहाँ कैसे स्क्रिप्ट लग रहा है की तरह है।

JWPlayer के अपने उदाहरण के लिए, मुझे यकीन है कि वहाँ कुछ जावास्क्रिप्ट टुकड़ा जो संकल्प को बदलने की अनुमति देगा हो सकता है कर रहा हूँ। .. सेलेनियम JavascriptExecutor आप का उपयोग कर्सर क्लिक करके हालांकि ऐसा नहीं है कि javacript कोड संकल्प परिवर्तन अनुकरण करने के लिए चला सकते हैं।

WebDriver driver = new ChromeDriver(); 

if (driver instanceof JavascriptExecutor) { 
    ((JavascriptExecutor) driver).executeScript(YOUR_JAVA_SCRIPT_STRING); 
} 

मैंने देखा है कि आपने उल्लेख किया है कि आप किसी मूल जेडब्लूप्लेयर एपीआई का उपयोग नहीं करना चाहते हैं। मैं इसे एकमात्र संभावित समाधान के रूप में देखता हूं।

0

यह समझना महत्वपूर्ण है कि यह सिर्फ फ्लैश वस्तुओं पर क्लिक उत्पन्न नहीं कर सकते हैं एक सेलेनियम के नौसिखिया के रूप में मेरे लिए एक छोटे से मुश्किल था। यहां देखे जाने वाला एकमात्र संभावित समाधान sikuli-script का उपयोग करना है।

मैं GitHub पर परियोजना मिल गया है: https://github.com/kevlened/sikuli_cpython। यह (Jython में लिखा) शुद्ध अजगर में sikuli लिपियों का उपयोग करें ताकि मुझे लगता है मैं कुछ sikuli स्क्रिप्ट लिखने और उन्हें सेलेनियम परीक्षण के साथ एकीकृत करने में सक्षम हो जाएगा अनुमति देता है।

-2

आप अगले पद्धति का उपयोग करके अपनी स्थिति को पा सकते हैं:

WebDriver.get_window_position() 
+0

दुर्भाग्य से, यह विंडो स्थिति देता है और कर्सर की स्थिति नहीं। – kiminoa

4

मैं एक अपारदर्शी एचटीएमएल 5 कैनवास जहाँ मैं विभिन्न ऑफसेट पर टूलटिप्स के मूल्यों की जाँच करने के लिए किया था, और क्या मुसीबत था!

  1. move_to_element_by_offset 2,42 करने से पहले मुद्दे हैं: मेरे सिर की पिटाई के बहुत सारे के बाद, मैं कई महत्वपूर्ण बातें सीखी। भी https://code.google.com/p/selenium/issues/detail?id=4215

  2. देखें यहां तक ​​कि एक अद्यतन के बाद, move_to_element_by_offset अभी भी persnickety लगता है। मैं ActionChains move_to_element मंडराना (तत्व के केंद्र के लिए चूक) और एक दूसरे ActionChainsmove_by_offset

  3. साथ के संयोजन के लिए बंद कर अब जब कि तुम स्थिति, फिर से अनुरोध स्थिति के प्रति संवेदनशील तत्व में हैं। मेरे मामले में, यह एक टूलटिप ऑब्जेक्ट है। यह selenium.webdriver.remote.element में .location['x'] और .location['y'] सदस्य होंगे जिन्हें आपको अपनी स्थिति की जांच करने की आवश्यकता है। तत्व आप move_to_element में पारित पर

    • .location['x'] और .location['y']:

चीज़ें है कि एक perform के बाद कर्सर स्थिति हथियाने के लिए काम नहीं करते हॉवर करता है, हर किसी को कुछ समय बचाने के लिए ActionChain d '। ये मान ActionChains द्वारा अपडेट नहीं किए गए हैं।

  • selenium.webdriver.remote.webdriverswitch_to_active_element; मैं स्पष्ट नहीं हूं कि कौन से तत्व "सक्रिय" के रूप में योग्य हैं, लेकिन यह हमारे टूलटिप्स को सक्रिय तत्वों के रूप में स्वीकार नहीं करता है और मुझे [0, 0] निर्देशांक वापस देता है।
  • selenium.webdriver.remote.webdriverget_window_position; दस्तावेज थोड़ा अस्पष्ट था, लेकिन यह वही करता है जो फ़ंक्शन सुझाता है: कर्सर की स्थिति के बजाए एक विंडो।
  • संबंधित मुद्दे