java - selenium tutorial




जावा में, यह जांचने का सबसे अच्छा तरीका है कि सेलेनियम वेबड्राइवर ने छोड़ दिया है या नहीं (2)

आपकी स्थिति के आधार पर आप मूल रूप से दो दृष्टिकोण ले सकते हैं।

स्थिति 1: वेबड्राइवर का विस्तार एक यथार्थवादी विकल्प नहीं है।

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

इस मामले में, साजन का जवाब और गिली की उनके उत्तर की सिफारिश उपयोगी नहीं होगी, क्योंकि RemoteWebDriver#stopClient() को ओवरराइड RemoteWebDriver#stopClient() एक विकल्प नहीं है। (इसके अलावा, भले ही यह था, ज्यादातर लोग एक साधारण उत्तर की तलाश में हैं।)

जब तक आप केवल वेबडिवर के मानक कार्यान्वयन का उपयोग नहीं कर रहे हैं जो सेलेनियम (फ़ायरफ़ॉक्स ड्रायवर, क्रोमड्राइवर, इंटरनेट एक्सप्लोरर ड्रायवर, सफारी ड्रायवर इत्यादि) के साथ आते हैं, तो आप वेबड्राइवर को रिमोट वेब ड्राइवर पर डाल सकते हैं और फिर जांच सकते हैं कि सत्र आईडी सही है या नहीं (पैट दाईं तरफ था ट्रैक करें, लेकिन sessionId को सीधी कॉल toString() ) का उपयोग करने से बेहतर है।

public static boolean hasQuit(WebDriver driver) {
    return ((RemoteWebDriver)driver).getSessionId() == null;
}

यह उत्तर सभी मामलों में से 95% के लिए अच्छा होना चाहिए, क्योंकि आप कितनी बार वेबड्राइवर का उपयोग करने जा रहे हैं जो रिमोट वेब ड्राइवर को लागू नहीं करता है? (अक्सर नहीं।)

स्थिति 2: आप वास्तव में अपने वेब ड्राइवर का विस्तार कर सकते हैं

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

इस मामले में, आप अपना खुद का इंटरफ़ेस बना सकते हैं जो वेबड्राइवर को बढ़ाता है:

public interface CustomDriver extends WebDriver {

    boolean hasQuit();

}

और फिर आप मानक वेब ड्राइवर्स को इस तरह बढ़ा सकते हैं (इस उदाहरण में, क्रोमड्राइवर):

public class CustomChromeDriver extends ChromeDriver implements CustomDriver {

    boolean hasQuit = false;

    @Override
    public boolean hasQuit() {
        return hasQuit;
    }

    @Override
    public void stopClient() {
        super.stopClient();
        hasQuit = true;
    }
}

मुझे देखने के लिए पेज ऑब्जेक्ट्स का एक संग्रह जांचना होगा, प्रत्येक व्यक्ति के लिए, अगर इसे अपने वेबड्राइवर पर छोड़ दिया गया है।

मैंने वेबड्राइवर की स्थिति की जांच करने के लिए निम्न विधि लिखी है:

public static boolean hasQuit(WebDriver driver) {
        try {
            driver.getTitle();
            return false;
        } catch (SessionNotFoundException e) {
            return true;
        }
}

यहां समस्या है: मुझे बूलियन की सच्चाई को खोजने के लिए अपवाद फेंकना और पकड़ना पसंद नहीं है, लेकिन ऐसा लगता है कि मेरे पास कोई विकल्प नहीं है क्योंकि वेबड्राइवर एपीआई यह जांचने के लिए कोई तरीका नहीं प्रदान करता है कि ड्राइवर ने क्या छोड़ा है या नहीं।

तो मेरा सवाल यह है कि क्या वेबड्राइवर छोड़ने के लिए यह जांचने का एक बेहतर तरीका है?

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


अगर quit() को कॉल किया गया है, driver.toString() शून्य देता है:

>>> FirefoxDriver: firefox on XP (null))

अन्यथा, यह ऑब्जेक्ट का हैशकोड देता है:

>>> FirefoxDriver: firefox on XP (9f897f52-3a13-40d4-800b-7dec26a0c84d)

इसलिए जब आप बुलियन निर्दिष्ट करते हैं तो आप शून्य की जांच कर सकते हैं:

boolean hasQuit = driver.toString().contains("(null)");




selenium-webdriver