قبل ذلك
مرحبًا أنا ديما ولا أعرف الأنماط. أما المختبر فلا يعني أنه إشكالي. كيف لأتمتة ..؟ حسنًا ، لنكن صادقين ، يمكنك أن تعيش أيضًا.
من غرف الدردشة والمؤتمرات والتواصل مع الزملاء ، من الواضح: النمط الرئيسي - PageObject - يتم تعلمه ، ما هو المطلوب أيضًا؟
وهنا كانت فقرة كبيرة من الأفكار حول لماذا لا نستخدم أنماط التصميم حقًا: ألا نعرفها ، أم أنها جيدة بدونها؟ كان هناك أيضًا تعميق في التاريخ بأن الأنماط ليست لك ، ولكن لعقود من الزمن أثبتت المعرفة والتقنيات والحجج التي ذكرها ورفاقه من الرفاق المعروفين الذين يعارضون.
ولكن ، في نهاية المطاف ، فإن معرفة الأنماط لن يضر بالتأكيد.
لذلك ، لا أحثك أبدًا على تحريف القوالب في كل مكان إلى رمز ، أبدأ في نشر سلسلة من المقالات حول الأنماط.
المزيد عن التنسيق ودعونا نذهب
المقالات / الكتب / دورات الفيديو عن الأنماط نفسها لائقة جدًا. وأنا متأكد من أنه يمكنك بسهولة العثور على مورد مع شرح كفء ، وأمثلة على YP المفضل لديك ، ورسائل البريد الإلكتروني ، وما إلى ذلك.
مهمة هذه المقالة والمقالات اللاحقة هي التحدث عن الأنماط لأولئك الذين يعملون بالفعل مع التعليمات البرمجية ، ولكن ليس لديهم قاعدة نظرية جيدة. لذلك ربما تكون هذه المقالات بالنسبة لي في المقام الأول.
حسنًا ، بما أنني نفسي أحد المختبرين ، وحتى في دائرة أصدقائي هناك الكثير من نفس الأشخاص ، فإن القصص ستميل نحو أتمتة الاختبار.
بعض الأنماط تبدو غريبة وغير مفيدة للغاية. ومع البعض ، على العكس من ذلك ، ستجد أنك كنت تنفذ شيئًا كهذا منذ فترة طويلة ، لم تكن تعرف أنه يطلق عليه ذلك.
على أي حال ، آمل أن تجد شيئًا مفيدًا لنفسك.
ونعم ، سأكون سعيدًا جدًا بالنقد البناء في التعليقات.
هنا.
- لنفسي - قال
- ما سيقال - قال
- لماذا - قال
- لمن وكيف - قال
يمكنك البدء.
وكيل - وكيل - نائب
النظرية (قليلا)
نمط الوكيل (في الإصدارات الروسية ،
نائب ). الفكرة هي أن نعطي للعمل ليس كائنًا حقيقيًا ، ولكن استبدالًا يستخدم أساليب الكائن + منطقنا ، إذا أضفنا واحدًا. هذا كل شيء.
كيف تفعل ذلك:
1. أنشئ واجهة باستخدام الطرق العامة للكائن الذي نريد استبداله
2. إنشاء فئة ذلك
- ينفذ هذه الواجهة
- لديه حق الوصول إلى الكائن الأصلي لاستدعاء أساليبه
3. أضف المنطق الخاص بك إلى أساليب الفئة التي تم إنشاؤها
تدرب
في الممارسة العملية ، يجب أن تكون أكثر وضوحا.
دانو: لدينا WebDriver. ولديه طريقة findElements (بواسطة) ؛
المهمة: أحتاج حقًا إلى تسجيل عدد العناصر التي تم العثور عليها بواسطة المحدد.
في كل مرة أتصل بالطريقة
driver.findElements(By.cssSelector(".item"));
أريد أن أرى سجلاً في السجلات - كم عدد العناصر التي تم العثور عليها
الحل 1. على الجبين. ما هو موجود: استخدمته.
نأخذها فقط ونكتب مع كل مكالمة العدد الذي تم العثور عليه:
List<WebElement> items = driver.findElements(By.cssSelector(".item")); logger.info("Found {} items", items.size());
الخيار طبيعي ، في حين أن مثل هذه المكالمات ، حسنًا ، دعنا نقول ، 7. على الرغم من أن عيوب هذا النهج واضحة بالفعل لأي شخص قام مرة واحدة على الأقل "بتعديل رمزه قليلاً".
الحل 2. نستخدم وكيل.
WebDriver هو واجهة. أعلن الأساليب ، ولكن لا يوجد تنفيذ. تتضمن عمليات التنفيذ ChromeWebDriver و FirefoxWebDriver وغير ذلك.
في الاختبارات ، لا يتعين علينا العمل مع أي فئة معينة للكروم أو سفاري. من الضروري فقط أن يقوم الفصل بتنفيذ واجهة WebDriver. سنفعل ذلك:
نقوم بإنشاء واجهة مع الأساليب العامة للكائن الذي نريد استبداله
في مثالنا ، توجد مثل هذه الواجهة بالفعل - WebDriver.
إنشاء فئة
- ينفذ هذه الواجهة
- لديه حق الوصول إلى الكائن الأصلي لاستدعاء أساليبه
public class LoggerWebDriver implements WebDriver{ private WebDriver driver; public void get(String s) { } public List<WebElement> findElements(By by) { return null; } public WebElement findElement(By by) { return null; }
أضف منطقك إلى أساليب الفصل الذي تم إنشاؤه
public class LoggerWebDriver implements WebDriver { private WebDriver driver; private final Logger logger = LogManager.getLogger(LoggerWebDriver.class); LoggerWebDriver() {
ماذا حدثتمت إضافته إلى الفصل الدراسي
private WebDriver driver;
هذا هو نفس الكائن الذي نريد استبداله. إنها أساليبه التي سوف نطلق عليها المزيد.
الآن ، يمكنك أن تنظر ، على سبيل المثال ، إلى الطريقة
public void get(String var1) { driver.get(var1); }
كل ما تفعله هذه الطريقة هو استدعاء get () على برنامج التشغيل الحقيقي.
وهذه هي الطريقة
public List<WebElement> findElements(By var1) { List<WebElement> items = driver.findElements(var1); logger.info("Selector {}. Found {} elements", var1.toString(), items.size()); return items; }
لقد توسعت حسب مهمتنا.
هذا كل ما يمكنك استخدامه في الاختبارات:
WebDriver driver = new LoggerWebDriver(); driver.get("http://google.com"); List<WebElement> items = driver.findElements(By.cssSelector("a"));
هنا. النمط جيد إذا كنت بحاجة إلى قطع الاتصال ، والتخزين المؤقت ، والتهيئة البطيئة ، والتحكم في الوصول إلى الأساليب. بشكل عام ، إذا كنت تكتب رمزًا وتريد حقًا أن يكون لديك نوع من البينية مع ميزاتك ، فإن أحد الخيارات هو وكيل.
الآن بعد أن عرفنا نمطًا آخر ، دعني أذكرك أنه عندما تكون المطرقة في يدك ، يبدو أن كل شيء من حولنا هو أظافر. فقط ضع ذلك في الاعتبار.