ওয়েবড্রাইভার.ডিসপোজ (), .ক্লোজ () এবং .কুইট () এর মধ্যে পার্থক্য


285

এই মধ্যে পার্থক্য কি

  1. Webdriver.Close()
  2. Webdriver.Quit()
  3. Webdriver.Dispose()

কোনটি ব্যবহার করতে হবে এবং কখন?


2
# ডিসপোজ পদ্ধতিটি চুপচাপ ওয়েবড্রাইভার এপিআই থেকে বাদ দেওয়া হয়েছে বলে মনে হয়। চেঞ্জলগে কোনও উল্লেখ নেই, সাম্প্রতিকতম উল্লেখটি আমি খুঁজে পেতে পারি v2.26 এপিআই ডক্স, যা আমি আর লিঙ্কটি খুঁজে পাচ্ছি না।
jordanpg

নীচের উত্তরগুলিতে আমি কোথায় বিভ্রান্তি আসছি তা দেখছি। আমি মনে করি এই প্রশ্নটি মূলত একটি সি # প্রশ্ন ছিল কারণ উপরের পদ্ধতিগুলি (ক্লোজ, প্রস্থান এবং নিষ্পত্তি) বড় হাতের অক্ষর (সি #) দিয়ে ছোট হাতের অক্ষর (জাভা) দিয়ে শুরু হয় না। সি # ওয়েবড্রাইভার ক্লায়েন্টের বাইন্ডিংগুলি থেকে নিষ্পত্তি করা হয়নি।
rcasady616

নিষ্পত্তি একটি। নেট প্যাটার্ন এবং তাই সেলেনিয়ামের এপিআই ডক্সে নথিভুক্ত করা হয় না। রিমোটওয়েবড্রাইভারে, প্রস্থান কল ডিসপোজ কল করে, যা একটি প্রস্থান কমান্ড প্রেরণ করে (ডিলিট / সেশন / {সেশনআইড})। ক্লায়েন্ট সাইডে বেশ কয়েকটি জায়গা রয়েছে যেখানে Quit কমান্ড বাধা দেওয়া হয়েছে। ফায়ারফক্সড্রাইভার। নেট বাস্তবায়ন প্রকৃতপক্ষে একটি প্রক্রিয়া করবে K প্রক্রিয়াটি নিখুঁতভাবে বন্ধ না হলে কল () কল করুন।
তামির ড্যানিয়েলি

উত্তর:


244

এটি একটি ভাল প্রশ্ন যা আমি দেখেছি লোকেরা ক্লোজ () ব্যবহার করা উচিত নয় যখন তাদের উচিত নয়। আমি সেলেনিয়াম ক্লায়েন্ট এবং ওয়েবড্রাইভার সি # বাইন্ডিংসের উত্স কোডটি দেখেছি এবং নিম্নলিখিতটি পেয়েছি।

  1. webDriver.Close() - ড্রাইভারের ফোকাসযুক্ত ব্রাউজার উইন্ডোটি বন্ধ করুন
  2. webDriver.Quit() - কলগুলি নিষ্পত্তি করুন ()
  3. webDriver.Dispose() সমস্ত ব্রাউজার উইন্ডো বন্ধ করে এবং নিরাপদে সেশনটি শেষ করে

নীচের কোডটি ড্রাইভারের অবজেক্টটি নিষ্পত্তি করবে, সেশনটি শেষ করবে এবং পরীক্ষার সময় ব্যর্থ হয় বা পাস হয় কিনা পরীক্ষার সময় খোলা সমস্ত ব্রাউজার বন্ধ করে দেয়।

public IWebDriver Driver;

[SetUp]
public void SetupTest()
{
    Driver = WebDriverFactory.GetDriver();
}

[TearDown]
public void TearDown()
{
    if (Driver != null)
      Driver.Quit();
}

সংক্ষেপে নিশ্চিত করুন যে প্রোগ্রামটি প্রস্থান করার আগে প্রস্থান () বা নিষ্পত্তি () ডাকা হয়েছে এবং আপনি কী করছেন সে সম্পর্কে নিশ্চিত না হলে ক্লোজ () পদ্ধতিটি ব্যবহার করবেন না।

দ্রষ্টব্য
আমার ভিএম হার্ডড্রাইভের জায়গা থেকে কেন চালাচ্ছিল তার সাথে সম্পর্কিত সমস্যাটি বের করার চেষ্টা করার সময় আমি এই প্রশ্নটি পেয়েছি। একটি ব্যতিক্রম দেখা যাচ্ছে যার ফলে প্রতিটি রান বলা হবে না বা প্রস্থান () বা ডিসপোজ () করা হবে যার ফলে অ্যাপডাটা ফোল্ডারটি হার্ড ড্রাইভ পূরণ করেছে fill সুতরাং আমরা প্রস্থান () পদ্ধতিটি সঠিকভাবে ব্যবহার করছিলাম তবে কোডটি অ্যাক্সেসযোগ্য ছিল। সংক্ষিপ্তসারটি নিশ্চিত করুন যে সমস্ত কোড পাথ ব্যতিক্রমী নিরাপদ নিদর্শনগুলি ব্যবহার করে বা আইডিস্পোজেবল বাস্তবায়ন করে আপনার পরিচালনা ব্যবস্থা অবহিত অবজেক্টগুলি পরিষ্কার করবে

এছাড়াও
রিমোটড্রাইভার কলিং প্রস্থান () বা ডিসপোজ () এর ক্ষেত্রে সেলেনিয়াম সার্ভারে সেশনটি বন্ধ করে দেবে। সেশনটি বন্ধ না হলে সেই সেশনের লগ ফাইলগুলি মেমরিতে থাকবে।


আপনি কীভাবে আপনার ব্যতিক্রমগুলি আপডেট করেছেন? শুধু প্রত্যেকের কাছে যান এবং একটি ছাড়ুন ()?
মায়ো

1
নুনিট, জুনিতের মতো একটি পরীক্ষার ফ্রেমের কাজের মধ্যে আপনাকে কেবলমাত্র তা নিশ্চিত করতে হবে যে ডিসপোজ () টেস্টটাইডাউন () বা টেস্টফাইচারটাইডাউন () তে আছে। সি # তে আপনি কেবল "ইউজিং" স্টেটমেন্ট ব্যবহার করতে পারেন এবং কোনও ব্যতিক্রম উত্থাপিত হলে সর্বদা ডিসপোজ বলা হয়। অবশেষে চেষ্টা করে ক্যাচ ব্যবহার করে জাভাতেও অনুরূপ কিছু করতে পারেন এবং অবশেষে ডিসপোজকে রেখে দিতে পারেন।
rcasady616

1
@ rcasady616 এটি আমার কাছে সেরা ব্যাখ্যা। এর জন্য ধন্যবাদ এবং আমি মনে করি এটি উত্সর্গের জন্য উপযুক্ত।
আরএনএস

2
@ Mr.Bultitude ভাল, যে বোধগম্য যে, বিবেচনা করা সেখানে হয় কোন পার্থক্য ^^ এই উত্তর মতে, Quit()একটি পুনঃচালনা হয়Dispose()
PixelMaster

1
@ পিক্সেলমাস্টার, হ্যাঁ 100% সঠিক, এটি মূলত একটি পুনর্নির্দেশ। সেলেনিয়ামে কোডটি লিখেছেন এমন একজন না হয়ে আমি কেবল অনুমান করতে পারি যে কেন দুটি পদ্ধতি সি # ক্লায়েন্টের বাইন্ডিংগুলিতে উপস্থিত রয়েছে। সম্ভবত তারা ক্লায়েন্টের ভাষাগুলি জুড়ে "ছাড়ার" জন্য একটি সাধারণ পদ্ধতি বজায় রাখতে চান, তবে ড্রাইভারটি "ব্যবহার" স্টেটমেন্ট সিনট্যাক্সে (ডাইনিকে ডিসপোজ () পদ্ধতির প্রয়োজন হবে) ব্যবহার করতে চান। এটি আমার সেরা অনুমান, তা হয় বা কোডটি পরিষ্কার করা দরকার।
rcasady616

47

Close() - এটি বর্তমানে ব্রাউজার বা পৃষ্ঠাটি বন্ধ করতে ব্যবহৃত হয় যা ফোকাস করছে।

Quit() - এটি ওয়েব ড্রাইভার ইনস্ট্যান্সটি বন্ধ করতে বা ওয়েব ড্রাইভারের ঘটনাটি ধ্বংস করতে ব্যবহৃত হয় (সমস্ত উইন্ডো বন্ধ করুন)।

Dispose() - আমি এই পদ্ধতি সম্পর্কে অবগত নই।


3
যদি আপনি .NET ভাষার বাইন্ডিং ব্যবহার করেন তবে Quitএবং Disposeপদ্ধতিগুলি একে অপরের প্রতিশব্দ হওয়া উচিত। অন্য কথায়, Quitকল Dispose
জিমএভান্স

22

driver.closeএবং driver.quitসেলেনিয়াম ওয়েবড্রাইভারে ব্রাউজার সেশনটি বন্ধ করার জন্য দুটি ভিন্ন পদ্ধতি। উভয়টি বোঝা এবং প্রতিটি পদ্ধতি কখন ব্যবহার করতে হয় তা আপনার পরীক্ষার কার্যকারণে গুরুত্বপূর্ণ। অতএব, আমি এই দুটি পদ্ধতিতে কিছুটা আলোকপাত করার চেষ্টা করেছি।

driver.close- এই পদ্ধতিটি ব্রাউজার উইন্ডোটি বন্ধ করে দেয় যার উপরে ফোকাস সেট করা আছে। এই পদ্ধতির পরিচিত নাম থাকা সত্ত্বেও ইন্টারফেসটি প্রয়োগ WebDriverকরে নাAutoCloseable

driver.quit- এই পদ্ধতিটি মূলত driver.disposeএকটি এখন অভ্যন্তরীণ পদ্ধতি কল করে যা ফলস্বরূপ সমস্ত ব্রাউজার উইন্ডো বন্ধ করে দেয় এবং ওয়েবড্রাইভার অধিবেশনকে নিখুঁতভাবে শেষ করে।

driver.dispose- পূর্বে উল্লিখিত হিসাবে, ওয়েবড্রাইভারের একটি অভ্যন্তরীণ পদ্ধতি যা অন্য উত্তর অনুসারে নিঃশব্দে ফেলে দেওয়া হয়েছে - যাচাইকরণের প্রয়োজন। আগের পদ্ধতিগুলির মধ্যে যে কোনওটি বেশিরভাগ ব্যবহারের ক্ষেত্রে কাজ করা উচিত কারণ এই পদ্ধতির কোনও সাধারণ পরীক্ষার ওয়ার্কফ্লোতে সত্যই ব্যবহারের ক্ষেত্র নেই।

ব্যাখ্যার ব্যবহারের ক্ষেত্রে: আপনি driver.quitযখনই প্রোগ্রামটি শেষ করতে চান আপনার ব্যবহার করা উচিত । এটি সমস্ত খোলা ব্রাউজার উইন্ডোজ বন্ধ করবে এবং ওয়েবড্রাইভার সেশনটি সমাপ্ত করবে। আপনি যদি driver.quitপ্রোগ্রামটির শেষে ব্যবহার না করেন তবে ওয়েবড্রাইভার সেশনটি সঠিকভাবে বন্ধ হবে না এবং ফাইলগুলি মেমরি থেকে সাফ হবে না। এর ফলে মেমরি ফাঁস ত্রুটি হতে পারে।

উপরোক্ত ব্যাখ্যাটি ওয়েবড্রাইভারের মধ্যে driver.closeএবং driver.quitপদ্ধতির মধ্যে পার্থক্যটি ব্যাখ্যা করবে । আশা করি এটি আপনার কাজে লাগবে।

নিম্নলিখিত ওয়েবসাইটটিতে সেলেনিয়াম পরীক্ষার জন্য কয়েকটি ভাল পরামর্শ রয়েছে: লিঙ্ক


14

quit(): খোলা ছিল এমন প্রতিটি সম্পর্কিত উইন্ডোটি বন্ধ করে এই ড্রাইভারটি ছেড়ে দেয়।

close() : বর্তমান উইন্ডোটি বন্ধ করুন, ব্রাউজারটি যদি বর্তমানে শেষ উইন্ডোটি খোলা থাকে তবে তা বন্ধ করুন।


এই উত্তরটি মূল পার্থক্যটিকে মিস করে: প্রস্থান () অন্তর্নিহিত ওয়েবড্রাইভার পরিষেবা বন্ধ করবে, যখন বন্ধ () না করে। প্রো-টিপ: শুধুমাত্র একটি উইন্ডো যদি থেকে যায় তবে কখনই বন্ধ () কল করবেন না
কোরি গোল্ডবার্গ

5

বন্ধ (): - ধরুন আপনি একই ড্রাইভার উদাহরণ সহ একাধিক ব্রাউজার উইন্ডো খুলেছেন, এখন ড্রাইভারের জন্য ক্লোজ () কল করা চালকের বর্তমান উইন্ডোটি বন্ধ করবে যা ড্রাইভারের দৃষ্টান্তটি নির্দেশ করা হয়েছে। তবে ড্রাইভারের উদাহরণটি এখনও স্মৃতিতে রয়ে গেছে এবং অন্যান্য উন্মুক্ত ব্রাউজার উইন্ডোগুলি পরিচালনা করতে ব্যবহার করা যেতে পারে।

প্রস্থান (): - আপনি যদি ড্রাইভার ইনস্ট্যান্টে প্রস্থান () কল করেন এবং সেখানে এক বা একাধিক ব্রাউজার উইন্ডোজ খোলা থাকে, এটি সমস্ত উন্মুক্ত ব্রাউজার উইন্ডোজ বন্ধ করে দেবে এবং ড্রাইভারের উদাহরণটি আবর্জনা সংগ্রহ করা হয় যা মেমরি থেকে সরানো হয়। সুতরাং এখন আপনি এই ড্রাইভার উদাহরণটি কল () এ কল করার পরে অন্যান্য ক্রিয়াকলাপ করতে ব্যবহার করতে পারবেন না। আপনি যদি এটি করেন তবে একটি ব্যতিক্রম ছুঁড়ে ফেলা হবে।

নিষ্পত্তি (): - আমি মনে করি না যে কোনও ওয়েবড্রাইভার উদাহরণের জন্য কোনও নিষ্পত্তি পদ্ধতি আছে।

আপনি রেফারেন্সের জন্য এই সেলেনিয়াম অফিসিয়াল জাভা ডক লিঙ্কে যেতে পারেন ।


"আমি মনে করি না যে ওয়েবড্রাইভার উদাহরণের জন্য একটি নিষ্পত্তি পদ্ধতি আছে।" অবশ্যই আছে (কমপক্ষে সি # তে)।
ইজোশুয়াস - মনিকা

5

ফ্যান্টমজেএসের গিথুব সম্পর্কিত একটি সমস্যার ভিত্তিতে, প্রস্থান () ফ্যান্টমজেএস প্রক্রিয়াটি শেষ করে না। আপনার ব্যবহার করা উচিত:

import signal
driver = webdriver.PhantomJS(service_args=service_args)
# Do your work here

driver.service.process.send_signal(signal.SIGTERM)
driver.quit()

লিংক


5

ক্লোজ () একটি ওয়েবড্রাইভার কমান্ড যা বর্তমানে ফোকাসে থাকা ব্রাউজার উইন্ডোটি বন্ধ করে দেয়। এই পদ্ধতির পরিচিত নাম থাকা সত্ত্বেও ইন্টারফেসটি প্রয়োগ WebDriverকরে নাAutoCloseable

অটোমেশন প্রক্রিয়া চলাকালীন, যদি একাধিক ব্রাউজার উইন্ডো খোলা থাকে তবে ক্লোজ () কমান্ডটি কেবলমাত্র বর্তমান ব্রাউজার উইন্ডোটি বন্ধ করবে যা সেই সময়ে ফোকাস করছে। অবশিষ্ট ব্রাউজার উইন্ডোজ বন্ধ করা হবে না। নিম্নলিখিত কোডটি বর্তমান ব্রাউজার উইন্ডোটি বন্ধ করতে ব্যবহার করা যেতে পারে:

ছাড়ুন () একটি ওয়েবড্রাইভার কমান্ড যা ড্রাইভার.ডিসপোজ পদ্ধতিটিকে কল করে যা ফলস্বরূপ সমস্ত ব্রাউজার উইন্ডো বন্ধ করে দেয় এবং ওয়েবড্রাইভার সেশনটি সমাপ্ত করে। প্রোগ্রামের শেষে যদি আমরা প্রস্থান () ব্যবহার না করি, ওয়েবড্রাইভার সেশনটি সঠিকভাবে বন্ধ হবে না এবং ফাইলগুলি মেমরি থেকে সরিয়ে দেওয়া হবে না। এর ফলে মেমরি ফাঁস ত্রুটি হতে পারে।

যদি অটোমেশন প্রক্রিয়াটি কেবল একটি একক ব্রাউজার উইন্ডোটি খোলায়, বন্ধ () এবং প্রস্থান () কমান্ড একই পদ্ধতিতে কাজ করে। অটোমেশনের সময় একাধিক ব্রাউজার উইন্ডো খোলা থাকলে উভয়ই তাদের কার্যকারিতাটিতে পৃথক হবে।

উপরে রেফের জন্য: এখানে ক্লিক করুন

ডিসপোজ কমান্ড ডিসপোজ () কে প্রস্থান () কল করা উচিত এবং এটি প্রদর্শিত হয়। তবে, এতে একই সমস্যা রয়েছে যে ফ্যান্টমজেএস ম্যানুয়ালি বন্ধ না হওয়া পর্যন্ত পরবর্তী কোনও ক্রিয়াকলাপ অবরুদ্ধ করা হয়।

রেফ লিঙ্ক


3

ড্রাইভার.ক্লোজ () এবং ড্রাইভার.কুইট () এর মধ্যে পার্থক্য

driver.close - এটি ব্রাউজার উইন্ডোটি বন্ধ করে যার উপর ফোকাস সেট করা আছে।

ড্রাইভার.কিউইট - এটি মূলত ড্রাইভার.ডিসপোজ পদ্ধতিটি কল করে যা ঘুরেফিরে সমস্ত ব্রাউজার উইন্ডো বন্ধ করে দেয় এবং ওয়েবড্রাইভার অধিবেশনকে নিখুঁতভাবে শেষ করে।


2

সেলেনিয়াম ওয়েবড্রাইভার

  1. WebDriver.Close()এই পদ্ধতিটি বর্তমান উন্মুক্ত উইন্ডোটি বন্ধ করতে ব্যবহৃত হয়। এটি বর্তমান উন্মুক্ত উইন্ডোটি বন্ধ করে যার উপর ড্রাইভারটি ফোকাস করেছে।

  2. WebDriver.Quit()এই পদ্ধতিটি ওয়েবড্রাইভারের উদাহরণটি ধ্বংস করতে ব্যবহৃত হয়। এটি সেই ড্রাইভারের সাথে সম্পর্কিত সমস্ত ব্রাউজার উইন্ডোজ বন্ধ করে এবং নিরাপদে সেশনটি শেষ করে। ওয়েবড্রাইভার.কুইট () কলটি ডিসপোজ করে।

  3. WebDriver.Dispose() এই পদ্ধতিটি সমস্ত ব্রাউজার উইন্ডো বন্ধ করে এবং নিরাপদে সেশনটি শেষ করে


4
আপনি যদি কিছু উদ্ধৃত করেন তবে আপনার উত্সটি দেওয়া উচিত।
মিরিওন হিউজেস

2

আমার বোধগম্যতা হ'ল driver.close();বর্তমান ব্রাউজারটি বন্ধ করে দেবে, এবং driver.quit();এটি সমস্ত ব্রাউজারকে শেষ করে দেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.