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

যে কোনও ফ্রেমওয়ার্ক ডিজাইনের সময়, আমাদের কিছু ডিজাইন আর্কিটেকচার, অর্থাৎ সেলেনিয়াম ডিজাইনের নিদর্শন এবং সেরা অনুশীলনগুলি বিবেচনা করা উচিত এবং ফ্রেমওয়ার্ক মডেলের ধরণের প্রয়োজন অনুসারে আমাদের একটি ভাষা নির্বাচন করা দরকার নকশা প্যাটার্ন সামগ্রিকভাবে ফ্রেমওয়ার্ক ডিজাইনের সমস্যা পরিস্থিতি সমাধান করতে।
তাই শুধু উপসংহারে, আমরা বেছে নিতে পারি এবং সেলেনিয়াম ফ্রেমওয়ার্ক মডেল (হাইব্রিড, পৃষ্ঠা অবজেক্ট মডেল, ডেটা চালিত, ইত্যাদি), কিন্তু মডেলটি বাস্তবায়ন করার জন্য, আমাদের কিছু ভাষা ডিজাইন প্যাটার্ন অনুসরণ এবং বাস্তবায়ন করতে হবে (যেমন, java/C# ডিজাইন প্যাটার্ন)
সেলেনিয়াম ফ্রেমওয়ার্ক তৈরি করার সময় কেন আমাদের সেলেনিয়াম ডিজাইনের প্যাটার্ন এবং সেরা অনুশীলনগুলির প্রয়োজন:
সেলেনিয়াম ফ্রেমওয়ার্কে কী নকশার নিদর্শনগুলি ব্যবহার করা উচিত:
ফ্রেমওয়ার্কের বিভিন্ন ক্ষেত্রগুলি প্রয়োগ করতে আপনি কয়েকটি নকশার প্যাটার্ন ব্যবহার করতে পারেন, যেমন একটি উদাহরণ:
আমরা আসন্ন পোস্টগুলিতে পুরো ফ্রেমওয়ার্কের লাইভ কোডিং টেম্পলেটটি করব।
সেলেনিয়ামে হাইব্রিড কাঠামোর জন্য একক ডিজাইন প্যাটার্ন:
সিঙ্গলটন ডিজাইন প্যাটার্ন এমন একটি প্যাটার্ন যা আপনি ক্লাস থেকে কেবল একটি অবজেক্ট তৈরি করতে এবং ক্লাসের পদ্ধতিগুলি অ্যাক্সেস করতে একই জিনিস ব্যবহার করতে পারবেন; আমরা কনফিগারারে নকশার প্যাটার্নটি ব্যবহার করতে পারি যেখানে আমাদের কেবলমাত্র কনফিগারেশন ডেটা পড়তে হবে এবং কিছু ডেটা স্টোর (কোনও ধরণের ডেটা স্ট্রাকচার যা কোনও শ্রেণি এবং পদ্ধতি থেকে কার্যকর করার সময় আপনি প্রয়োজন হিসাবে ব্যবহার করতে পারেন) এ লোড করতে পারি)
সুতরাং আমরা সিঙ্গেলন ডিজাইন প্যাটার্নের সাথে একই ডিজাইনের সময় নীচের পদ্ধতিতে একই অর্জন করতে পারি।
দ্রষ্টব্য: আমরা টিউটোরিয়াল সিরিজের আসন্ন বিভাগে স্ক্র্যাচ থেকে ফ্রেমওয়ার্কটি ডিজাইন করব এবং বিকাশ করব, তবে এই নির্দিষ্ট টিউটোরিয়ালটি আপনাকে নকশার প্যাটার্নটির প্রয়োজনীয়তার অন্তর্দৃষ্টি প্রদান করবে।
প্যাকেজ com.cyborg.core.generic.dataUtils; java.io.FileInputStream আমদানি করুন; java.io.FileNotFoundException আমদানি করুন; java.io.IOException আমদানি করুন; java.io.InputStream আমদানি করুন; java.util.LinkedHashMap আমদানি করুন; java.util.Properties আমদানি করুন; java.util.Set আমদানি করুন; org.apache.log4j.PropertyConfigurator আমদানি করুন; // এটি SingleTon ক্লাস পাবলিক ক্লাস PropertiesDataUtils { ব্যক্তিগত সম্পত্তি বৈশিষ্ট্য = নাল; পাবলিক স্ট্যাটিক LinkedHashMap configDataStore = নতুন LinkedHashMap (); ইনপুটস্ট্রিম হল = নাল; // এটি ক্লাসের স্ট্যাটিক এবং প্রাইভেট রেফারেন্স যা আপনি ফ্রেমওয়ার্কের যেকোন জায়গায় ব্যবহার করতে পারেন প্রাইভেট স্ট্যাটিক প্রোপার্টিজ ডাটা ইউটিলস প্রোপার্টিডেটা ইউটিলস = নাল; boolean centerizeLog = false; // এটি অবজেক্ট তৈরি করার জন্য ব্যক্তিগত কনস্ট্রাক্টর কিন্তু আপনি SingleTon প্যাটার্নের ডিজাইন বজায় রাখার জন্য ক্লাসের বাইরে থেকে এটি অ্যাক্সেস করতে পারবেন না অর্থাৎ শুধুমাত্র একটি অবজেক্ট তৈরি। ব্যক্তিগত বৈশিষ্ট্য ডাটা ইউটিলস (স্ট্রিং ফাইলপথ) { জেনারেট ডেটাস্টোর (ফাইলপথ); centerizeLog = Boolean.parseBoolean(PropertiesDataUtils.configDataStore.get("centralizedLog")); if(centralizeLog) PropertyConfigurator.configure(System.getProperty("user.dir")+"//src//test//resources//config//log4j_central.properties"); অন্যথায় PropertyConfigurator.configure(System.getProperty("user.dir")+"//src//test//resources//config//log4j_local.properties"); } private PropertiesDataUtils() { } // এই পদ্ধতিটি মূলত SingleTon ক্লাসের পাবলিক স্ট্যাটিক PropertiesDataUtils getInstance(String filePath) { if (propertiesDataUtils == null) propertyDataUtils = new PropertiesDataUtils(filePath); প্রত্যাবর্তন বৈশিষ্ট্য DataUtils; } // এই পদ্ধতিটি মূলত ডেটাস্টোর তৈরি করে যেখানে আপনি পূর্বে আলোচনা করা সমস্ত কনফিগার ডেটা সংরক্ষণ করতে চান প্রাইভেট ভ্যায়েড জেনারেট ডেটাস্টোর(স্ট্রিং ফাইলপথ) { চেষ্টা করুন { this.properties = new Properties(); is=new FileInputStream(filePath); property.load(is); overrideFromEnvironment(); সেট কী = loadAllKeys(); জন্য (অবজেক্ট k : কী) { স্ট্রিং কী = (স্ট্রিং) k; configDataStore.put(কী, getPropertyValue(কী)); } } ধরা (FileNotFoundException fileNotFoundException) { স্ট্রিং ব্যতিক্রম ডেটা = String.valueOf(fileNotFoundException.getCause().getMessage()); } ধরা (IOException ioException) { স্ট্রিং ব্যতিক্রম ডেটা = String.valueOf(ioException.getCause().getMessage()); } অবশেষে { if (null != is) { try { is.close(); } ধরা (ব্যতিক্রম e) { স্ট্রিং ব্যতিক্রম ডেটা = String.valueOf(e.getCause().getMessage()); } } } } // এই পদ্ধতিটি বৈশিষ্ট্য ফাইল থেকে সমস্ত কী লোড করতে ব্যবহৃত হয়।
এই পদ্ধতির দ্বারা, আমরা সিঙ্গলটন ডিজাইন প্যাটার্নটি ব্যবহার করতে এবং এটি আমাদের কাঠামোর মধ্যে ব্যবহার করতে পারি।
সেলেনিয়াম ফ্রেমওয়ার্কে কারখানার নকশার প্যাটার্ন:
কারখানার নকশার ধরণে আমরা একটি শ্রেণি তৈরি করি (আমরা একে ফ্যাক্টরি শ্রেণি বলি) এবং অন্যদিকে আমাদের একটি ইন্টারফেস এবং অবশেষে ক্লাস সংখ্যা "এন" দ্বারা প্রয়োগ করা।
কারখানার শ্রেণিটি মূলত উপরের শ্রেণীর অবজেক্টকে (প্রয়োজনীয়তার উপর নির্ভর করে) প্রদান করে, সুতরাং আপনাকে উপরের জিনিসগুলি মোকাবেলা করতে হবে না "এন" শ্রেণীর সংখ্যা 'অবজেক্ট; পরিবর্তে, আপনি কারখানা শ্রেণীর একটি অবজেক্ট তৈরি করতে পারেন এবং কারখানার শ্রেণির পদ্ধতিটি কল করতে পারেন যা অ্যাডোব "এন" শ্রেণীর মধ্যে প্রয়োজনীয় ক্লাসগুলির জন্য প্রয়োজনীয় বেসলাইন অবজেক্টটি প্রদান করে।
এখন, বিভিন্ন ওয়েবড্রাইভার / ব্রাউজার বাস্তবায়ন তৈরি করার সময় আপনি এই নকশাটি বিবেচনা করতে পারেন।
আমরা একটি বিভিন্ন আছে ব্রাউজার এবং সেলেনিয়াম একটি ভিন্ন ধরনের সঙ্গে বাস্তবায়ন ড্রাইভার (যেমন, LocalDriver, RemoteDriver, ThreadDriver, ইত্যাদি) এবং যখন আপনার একটি নির্দিষ্ট ধরণের ড্রাইভার এবং নির্দিষ্ট ধরণের ব্রাউজার প্রয়োজন হয় তখন আপনি কনফিগারেশন ফাইলে উল্লেখ করতে পারেন এবং প্রয়োজনের ভিত্তিতে ফ্যাক্টরি ক্লাস আপনাকে উদাহরণ প্রদান করবে আপনার অটোমেশন স্ক্রিপ্ট আরও ব্যবহার করার জন্য ড্রাইভার এবং ব্রাউজার।
ড্রাইভার-ব্রাউজার ইন্টারঅ্যাকশন তৈরি করার সময় এই নকশা প্যাটার্নটি বাস্তবায়নের জন্য কোড বেসটি এখানে রয়েছে:
ইন্টারফেস ডিজাইন:
প্যাকেজ com.cyborg.core.web.utils.driverUtils; org.openqa.selenium.WebDriver আমদানি করুন; org.openqa.selenium.remote.RemoteWebDriver আমদানি করুন; পাবলিক ইন্টারফেস IDriver { সর্বজনীন WebDriver init(স্ট্রিং ব্রাউজার নাম); }
"এন" ব্রাউজ ক্লাসের প্রয়োগের সংখ্যা (যারা ইন্টারফেস বাস্তবায়ন করছে):
প্যাকেজ com.cyborg.core.web.utils.driverUtils; org.openqa.selenium.WebDriver আমদানি করুন; org.openqa.selenium.chrome.ChromeDriver আমদানি করুন; org.openqa.selenium.edge.EdgeDriver আমদানি করুন; org.openqa.selenium.firefox.FirefoxDriver আমদানি করুন; org.openqa.selenium.ie.InternetExplorerDriver আমদানি করুন; org.openqa.selenium.safari.SafariDriver আমদানি করুন; সর্বজনীন শ্রেণীর লোকালড্রাইভার IDriver প্রয়োগ করে { সর্বজনীন ওয়েবড্রাইভার ইনিট(স্ট্রিং ব্রাউজারনেম) { স্ট্রিং পাথটোড্রাইভার = getDriverPath(ব্রাউজারনেম); if (null != browserName) { স্যুইচ (browserName) { ক্ষেত্রে "chrome": System.setProperty("webdriver.chrome.driver", pathToDriver); নতুন ChromeDriver(); case "firefox": System.setProperty("webdriver.gecko.driver", pathToDriver); নতুন FirefoxDriver(); ডিফল্ট: System.setProperty("webdriver.chrome.driver", pathToDriver); নতুন ChromeDriver(); } } অন্য { System.setProperty("webdriver.chrome.driver", pathToDriver); নতুন ChromeDriver(); } } ব্যক্তিগত স্ট্রিং getDriverPath(স্ট্রিং ব্রাউজারনেম) { স্ট্রিং osData = System.getProperty("os.name").toLowerCase().split("\\s")[0]; if (null != osData) { if (osData.equalsIgnoreCase("mac")) { ফিরুন "./DriversExe/" + osData + "_" + ব্রাউজারনেম; } অন্যথায় যদি (osData.contains("nux") || (osData.contains("nix"))) { return "./DriversExe/linux_" + ব্রাউজারনেম; } অন্যথায় যদি (osData.contains("win")) { return "./DriversExe/" + osData + "_" + ব্রাউজারনেম + ".exe"; } } রিটার্ন নাল; } }
এখানে রিমোট ড্রাইভার শ্রেণীর প্রয়োগ রয়েছে:
প্যাকেজ com.cyborg.core.web.utils.driverUtils; org.openqa.selenium.WebDriver আমদানি করুন; org.openqa.selenium.remote.Desired Capabilities আমদানি করুন; org.openqa.selenium.remote.RemoteWebDriver আমদানি করুন; com.cyborg.core.generic.dataUtils.PropertiesDataUtils আমদানি করুন; java.net.MalformedURLException আমদানি করুন; java.net.URL আমদানি করুন; পাবলিক ক্লাস RemoteDriver IDriver { Desired Capabilities caps প্রয়োগ করে; স্ট্রিং remoteHuburl=PropertiesDataUtils.configDataStore.get("WEB_GRID_IP"); @Override public WebDriver init(String browserName) { যদি (browserName != null) { স্যুইচ করুন (browserName) { case "firefox": চেষ্টা করুন { return new RemoteWebDriver(new URL(remoteHuburl), caps.firefox()); } ধরা (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } কেস "ক্রোম": চেষ্টা করুন { রিটার্ন নতুন RemoteWebDriver(নতুন URL(remoteHuburl), caps.chrome()); } ধরা (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } ক্ষেত্রে "যেমন": চেষ্টা করুন { নতুন RemoteWebDriver(নতুন URL(remoteHuburl), caps.internetExplorer()); } ধরা (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } ডিফল্ট: চেষ্টা করুন { রিটার্ন নতুন RemoteWebDriver(new URL(remoteHuburl), caps.chrome()); } ধরা (MalformedURLException malformedUrlEx) { malformedUrlEx.getCause().getMessage(); malformedUrlEx.printStackTrace(); } } রিটার্ন নাল; } else { রিটার্ন নাল; } }
এখানে ফ্যাক্টরি ক্লাসের বাস্তবায়ন, যা সম্পর্কিত ব্রাউজার এবং ড্রাইভার শ্রেণীর অবজেক্ট সরবরাহ করে:
প্যাকেজ com.cyborg.core.web.utils.driverUtils; পাবলিক ক্লাস ড্রাইভারপ্রোভাইডার { পাবলিক আইডিরাইভার গেটড্রাইভার(স্ট্রিং টাইপঅফড্রাইভার) { যদি (টাইপঅফড্রাইভার!= নাল) { স্যুইচ (টাইপঅফড্রাইভার) { কেস "স্থানীয়": নতুন লোকালড্রাইভার (); কেস "রিমোট": নতুন রিমোট ড্রাইভার (); ডিফল্ট: নতুন LocalDriver(); } } অন্য { রিটার্ন নাল; } } }
তেমনি, আপনি প্রয়োগ করতে পারেন অ্যাপিয়াম একই নকশা সহ চালক, কেবল বাস্তবায়ন সরবরাহ করুন এবং আইড্রাইভার ইন্টারফেসে একটি পদ্ধতি ঘোষণা করুন।
উপসংহার: এর সাথে আমরা এখানে উপসংহারে পৌঁছেছি যে সেলেনিয়ামে হাইব্রিড কাঠামোটি বিকাশের সময় আপনি কীভাবে সেলেনিয়াম ডিজাইন নিদর্শন এবং সেরা অনুশীলনের অংশ হিসাবে ভাষা ডিজাইন নিদর্শনগুলি ব্যবহার করতে পারেন; টিউটোরিয়ালের আসন্ন বিভাগগুলিতে, আমরা সেলেনিয়াম অটোমেশনের জন্য পৃষ্ঠা অবজেক্ট মডেল কাঠামোটি তৈরি করব।
পেতে সেলেনিয়াম সামগ্রিক টিউটোরিয়াল, আপনি এখানে দেখতে পারেন.