2 গুরুত্বপূর্ণ সেলেনিয়াম ডিজাইন প্যাটার্ন এবং সর্বোত্তম অনুশীলন

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

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

আসুন এটি বিস্তারিতভাবে বুঝতে পারি: 

সেলেনিয়াম নকশা নিদর্শন এবং সেরা অনুশীলন -সেলেনিয়ামে হাইব্রিড ফ্রেমওয়ার্ক

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

তাই শুধু উপসংহারে, আমরা বেছে নিতে পারি এবং সেলেনিয়াম ফ্রেমওয়ার্ক মডেল (হাইব্রিড, পেজ অবজেক্ট মডেল, ডেটা চালিত, ইত্যাদি), কিন্তু মডেলটি বাস্তবায়ন করতে, আমাদের কিছু ভাষা ডিজাইন প্যাটার্ন অনুসরণ এবং বাস্তবায়ন করতে হবে (যেমন, 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) propertiesDataUtils = 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()); } } } } // এই পদ্ধতিটি বৈশিষ্ট্য ফাইল থেকে সমস্ত কী লোড করতে ব্যবহৃত হয়।

এই পদ্ধতির দ্বারা, আমরা সিঙ্গেলটন ডিজাইন প্যাটার্ন ব্যবহার করতে পারি এবং এটি আমাদের কাঠামোতে ব্যবহার করতে পারি।

সেলেনিয়াম ফ্রেমওয়ার্কে ফ্যাক্টরি ডিজাইন প্যাটার্ন: 

ফ্যাক্টরি ডিজাইন প্যাটার্নে, আমরা একটি ক্লাস তৈরি করি (আমরা এটিকে একটি ফ্যাক্টরি ক্লাস বলি), এবং অন্যদিকে, আমাদের একটি আছে ইন্টারফেস এবং অবশেষে "n" ক্লাসের সংখ্যা দ্বারা প্রয়োগ করা হয়।

ফ্যাক্টরি ক্লাস মূলত উপরের ক্লাসের অবজেক্টটি ফেরত দেয় (প্রয়োজনের উপর নির্ভর করে), তাই আপনাকে উপরের সাথে মোকাবিলা করতে হবে না "n" ক্লাস অবজেক্টের সংখ্যা; বরং, আপনি ফ্যাক্টরি ক্লাসের একটি অবজেক্ট তৈরি করতে পারেন এবং ফ্যাক্টরি ক্লাসের পদ্ধতিটিকে কল করতে পারেন যা অ্যাডোব "n" ক্লাসগুলির মধ্যে প্রয়োজনীয় ক্লাসগুলির জন্য প্রয়োজনীয় বেসলাইন অবজেক্ট প্রদান করে।

এখন, বিভিন্ন ওয়েবড্রাইভার / ব্রাউজার বাস্তবায়ন তৈরি করার সময় আপনি এই নকশাটি বিবেচনা করতে পারেন। 

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

ড্রাইভার-ব্রাউজার ইন্টারঅ্যাকশন তৈরি করার সময় এই ডিজাইন প্যাটার্ন বাস্তবায়নের জন্য কোড বেস এখানে রয়েছে: 

ইন্টারফেস ডিজাইন: 

প্যাকেজ com.cyborg.core.web.utils.driverUtils; org.openqa.selenium.WebDriver আমদানি করুন; org.openqa.selenium.remote.RemoteWebDriver আমদানি করুন; পাবলিক ইন্টারফেস IDriver { সর্বজনীন WebDriver init(স্ট্রিং ব্রাউজার নাম); }

ব্রাউজ ক্লাস বাস্তবায়নের "N" সংখ্যা (যারা ইন্টারফেস বাস্তবায়ন করছে):

প্যাকেজ 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": চেষ্টা করুন { রিটার্ন নতুন 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(); } } অন্য { রিটার্ন নাল; } } }

একইভাবে, আপনি বাস্তবায়ন করতে পারেন অ্যাপিয়াম একই নকশা সহ ড্রাইভার, শুধু বাস্তবায়ন প্রদান করুন এবং IDriver ইন্টারফেসে একটি পদ্ধতি ঘোষণা করুন। 

উপসংহার: এর সাথে, আমরা এখানে উপসংহার করছি কিভাবে আপনি সেলেনিয়াম ডিজাইন প্যাটার্নের অংশ হিসেবে ভাষা ডিজাইন প্যাটার্ন ব্যবহার করতে পারেন এবং সেলেনিয়ামে হাইব্রিড ফ্রেমওয়ার্ক তৈরি করার সময় সর্বোত্তম অনুশীলন করতে পারেন; টিউটোরিয়ালের আসন্ন অংশগুলিতে, আমরা সেলেনিয়াম অটোমেশনের জন্য পেজ অবজেক্ট মডেল ফ্রেমওয়ার্ক তৈরি করব।

পেতে সেলেনিয়ামের উপর সামগ্রিক টিউটোরিয়াল, আপনি এখানে যেতে পারেন

মতামত দিন