के बिना क्लिक नहीं किया गया है, मुझे परीक्षणों में "स्लीपर" (Thread.sleep(millis)
का उपयोग करने से नफरत है, लेकिन बिना स्लीपर के कुछ परीक्षण विफल हो जाते हैं।एपियम + सेलेनियम एंड्रॉइड: सूची दृश्य आइटम थ्रेड.sleep
मेरे पास है Android
एप्लिकेशन में और मैं सूची में पहले आइटम (हमारे मामले में सऊदी अरबी) पर टैप करना चाहता हूं।
public AndroidDriver androidDriver;
...
androidDriver = new AndroidDriver(serverAddress, capabilities);
androidDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driverWait = new WebDriverWait(androidDriver, 30);
// at this moment everything is initialized and working properly,
// Appium server is up and running
driverWait.until(ExpectedConditions.visibilityOfElementLocated(By.id("com.###.debug:id/countries_list_view")));
WebElement countriesList = driver.findElement(By.id("com.###.debug:id/countries_list_view"));
List<WebElement> countries = countriesList.findElements(By.id("com.###.debug:id/list_item_container"));
WebElement country = countries.get(0);
// country isn't null, and it corresponds to a real ListView row
driverWait.until(ExpectedConditions.elementToBeClickable(country));
Thread.sleep(1000); // <---- country isn't clicked without this
country.click();
एक ही समस्या Calabash/Cucumber
परीक्षण में मौजूद है (स्पष्ट प्रतीक्षा करता है) की आवश्यकता।
मैं
driverWait.until(ExpectedConditions.visibilityOfElementLocated(By));
driverWait.until(ExpectedConditions.visibilityOf(WebElement));
driverWait.until(ExpectedConditions.elementToBeClickable(By));
driverWait.until(ExpectedConditions.presenceOfElementLocated(By));
तत्व है जो क्लिक किया जाना चाहिए के लिए इंतजार और कोई भी काम कर रहा है के विभिन्न तरीकों की कोशिश की है। फिलहाल जब मैं ListView
1 आइटम पर टैप करने का प्रयास करता हूं, ListView
मौजूद है और सभी सूची तत्व स्क्रीन पर हैं।
मैंने Appium Inspector
का उपयोग कर सूची पंक्ति XPath
प्राप्त करके ListView
पहली पंक्ति को खोजने का प्रयास किया है। नतीजा वही है - दृश्य Thread.sleep
के बिना क्लिक नहीं किया गया है।
परीक्षण में Thread.sleep
का उपयोग करना वास्तव में खराब अभ्यास है और मेरे परीक्षण अस्थिर बनाता है। मैं इस मामले में परीक्षण परिणामों पर भरोसा नहीं कर सकता, क्योंकि अगर आवेदन ठीक से काम कर रहा है तो भी वे असफल हो सकते हैं। सेलेनियम परीक्षणों में "प्रतीक्षा" और "नींद" उपयोग के बारे में एक लेख है (Selenium WebDriver wait)।
- परीक्षणों में ऐसे मुद्दों को कैसे ठीक किया जाए?
- ऑटोमेशन दुनिया में कितनी बार
Thread.sleep
कॉल का उपयोग किया जाता है? (मैं ज्यादातर एंड्रॉइड डेवलपर हूं, और मोबाइल स्वचालन में अनुभव नहीं किया)।
अद्यतन: मैं अंतर्निहित और स्पष्ट प्रतीक्षा करता है ऊपर का मिश्रण न करने की कोशिश की है, JeffC उल्लेख किया है, और यह मदद नहीं की।
यहाँ मेरी परीक्षा है:
@Test
public void selectCountryLanguageAndStartApplication() throws Exception {
countryLanguagePage.loaded();
countryLanguagePage.selectFirstCountry();
countryLanguagePage.pleaseSelectCountryTextIsHidden();
countryLanguagePage.startClick();
}
...
/**
* Verify the page has loaded
*/
public static void loaded() {
driver.findElement(By.id("com.###.debug:id/countries_list_view"));
}
मैं अगर पेज हर परीक्षा में लोड किया जाता है की पुष्टि करने कर रहा हूँ। अगर मैं केवल अंतर्निहित प्रतीक्षा करता हूं - परीक्षण समय-समय पर विफल रहता है; अगर मैं केवल स्पष्ट प्रतीक्षा करता हूं - यह वही है, परीक्षण समय-समय पर विफल रहता है।
मुझे Appium tutorial में मिला है कि वे स्पष्ट 1, 2 के साथ implicit का उपयोग करते हैं। यह docs के अनुसार अजीब लग रहा है।
काम कर समाधान: मैं थोड़ा loaded
विधि
public static void loaded() {
driver.findElement(By.id("com.###.debug:id/countries_list_view"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
है कि नींद का होना "स्थिरता" परीक्षण करने के लिए लाता है और मैं स्पष्ट प्रतीक्षा करता है साथ या उनके बिना उन पर तत्वों और प्रेस पा सकते हैं संशोधित किया।
क्या इसका मतलब यह है कि मुझे "नींद" जोड़नी चाहिए जब नया Activity
लॉन्च हुआ (मेरे लिए एकमात्र कामकाजी समाधान)? या मैं गलत तरीके से गतिविधि शुरू करने की प्रतीक्षा कर रहा हूं?
'driverWait.until (ExpectedConditions.elementToBeClickable (तत्व));' यह होना चाहिए 'elementToBeClickable (देश)' बजाय? – AdamMc331
संख्या। स्पष्ट प्रतीक्षा के बारे में पोस्ट से "सेलेनियम वेबड्राइवर प्रतीक्षा" लिंक देखें। –
ठीक है, बस जांच रहा है। मैंने सेलेनियम का उपयोग नहीं किया है, लेकिन मैंने एंड्रॉइड के लिए एस्प्रेसो का उपयोग करके कुछ स्वचालित परीक्षण किया है और मुझे याद है कि काम पर परीक्षण के लिए डिवाइस पर एनीमेशन बंद करने की सिफारिश की जा रही है। एनिमेशन क्लिक सूची आइटम के साथ मुद्दों का कारण बन सकता है। क्या आपने ऐसा करने की कोशिश की है? – AdamMc331