أكثر

برنامج Selenium Web Driver و OpenLayers 2.x: كيف تقوم بالتعريف على الخريطة؟

برنامج Selenium Web Driver و OpenLayers 2.x: كيف تقوم بالتعريف على الخريطة؟


عليّ اختبار تطبيق خرائط الويب الذي يستخدم OpenLayers 2.x ، باستخدام برنامج تشغيل الويب Selenium في Java واستخدام Firefox (أنا على Windows 7).

لقد وجدت هذه المشكلة فقط https://stackoverflow.com/questions/28682195/how-to-use-openlayers-drawfeature-with-selenium-webdriver-in-java-double-click الذي لا يحل مشكلتي.

عليّ اختبار وظيفة التحديد على الميزات الموجودة على الخريطة ، لذلك:

1) حدد زر التعريف على شريط الأدوات الخاص بي (أنا قادر على القيام بذلك ... لذا لا مشكلة ...)

2) انقر فوق ميزة النقطة على الخريطة (لا يمكنني القيام بذلك ...)

3) أغلق مربع الحوار الذي يعرض بيانات felatire الوصفية (لست قادرًا على القيام بذلك ...)

لا يمكنني إعطاء عنوان url الخاص بتطبيقي بأنه ليس عامًا ولكن يمكنني استخدام حالة الاختبار البسيطة هذه

http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/markers.html

هذا يوضح حالة الاستخدام الخاصة بي.

بالنقر على الخريطة ، سترى تفاصيل الميزة ثم تغلق مربع الحوار.

ها أنت الكود الخاص بي الذي لا يعمل

حزمة myTestProjects ؛ استيراد java.util.concurrent.TimeUnit ؛ استيراد org.openqa.selenium.By ؛ استيراد org.openqa.selenium.WebDriver ؛ استيراد org.openqa.selenium.WebElement ؛ استيراد org.openqa.selenium.firefox.FirefoxDriver ؛ استيراد org.openqa.selenium.interactions.Actions ؛ تعريف فئة عامة OpenLayersTest_02 {محرك WebDriver ثابت خاص = فارغ ؛ يطرح public static void main (String [] args) InterruptException {// إنشاء مثيل جديد لبرنامج تشغيل Firefox System.out.println ("إنشاء مثيل جديد لبرنامج تشغيل Firefox ...") ؛ driver = new FirefoxDriver () ؛ // ضع انتظارًا ضمنيًا ، وهذا يعني أن أي بحث عن عناصر على الصفحة قد يستغرق وقتًا مضبوطًا على الانتظار الضمني قبل طرح استثناء driver.manage (). timeouts (). withinlyWait (10، TimeUnit.SECONDS)؛ // يُنصح دائمًا بتكبير النافذة إلى أقصى حد قبل تنفيذ إجراء DragNDrop System.out.println ("تكبير النافذة ...") ؛ driver.manage (). window (). تكبير () ؛ Thread.sleep (3000 لتر) ؛ // إطلاق نموذج علامة OpenLayers 2.x System.out.println ("إطلاق نموذج علامة OpenLayers 2.x ...") ؛ Thread.sleep (3000 لتر) ؛ driver.get ("http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/markers.html") ؛ // إنشاء مثيل إجراء جديد System.out.println ("إنشاء مثيل إجراء جديد ...") ؛ قانون الإجراءات = إجراءات جديدة (سائق) ؛ // ابحث عن منفذ العرض بالداخل في الساحرة هناك خريطة System.out.println ("ابحث عن منفذ العرض بالداخل في الساحرة توجد الخريطة ...") ؛ Thread.sleep (3000 لتر) ؛ WebElement el = driver.findElement (By.id ("OpenLayers_Map_2_OpenLayers_ViewPort")) ؛ // ابدأ تسلسل الإجراء System.out.println ("بدء تسلسل الإجراء ...") ؛ Thread.sleep (3000 لتر) ؛ act.click (). Perform () ؛ // تحديد علامة System.out.println ("تحديد العلامة عند 285 ، 111 ...") ؛ Thread.sleep (3000 لتر) ؛ act.moveToElement (el، 285، 111). انقر فوق (). build (). Perform () ؛ // Print TEST = OK !! System.out.println ("TEST = OK !!")؛ //driver.quit () ؛ }}

اقتراحات؟ عينات؟


لقد حللت !!

ها أنت الرمز الذي يعمل!

حزمة myTestProjects ؛ استيراد java.util.concurrent.TimeUnit ؛ استيراد org.openqa.selenium.By ؛ استيراد org.openqa.selenium.WebDriver ؛ استيراد org.openqa.selenium.WebElement ؛ استيراد org.openqa.selenium.firefox.FirefoxDriver ؛ استيراد org.openqa.selenium.firefox.FirefoxProfile ؛ استيراد org.openqa.selenium.firefox.internal.ProfilesIni؛ استيراد org.openqa.selenium.interactions.Actions ؛ تعريف فئة عامة OpenLayersTest_02 {محرك WebDriver ثابت خاص = فارغ ؛ public static void main (String [] args) تطرح InterruptException {// أنشئ ملفًا شخصيًا جديدًا وقم بتحميل ملفي الشخصي الافتراضي في Firefox System.out.println ("Creo un nuovo profilo e vi carico il profilo Firefox di default…") ؛ Thread.sleep (3000 لتر) ؛ ملف تعريف ProfilesIni = ملفات تعريف جديدة () ؛ FirefoxProfile ffProfile = profile.getProfile ("افتراضي") ؛ // أنشئ نسخة جديدة من برنامج تشغيل Firefox باستخدام ملفي الشخصي الجديد في Firefox System.out.println ("Creo una nuova sessione del browser Firefox…") ؛ Thread.sleep (3000 لتر) ؛ سائق = FirefoxDriver جديد (ffProfile) ؛ // ضع انتظارًا ضمنيًا ، وهذا يعني أن أي بحث عن عناصر على الصفحة قد يستغرق وقتًا مضبوطًا على الانتظار الضمني قبل طرح استثناء driver.manage (). timeouts (). // يُنصح دائمًا بتكبير النافذة إلى أقصى حد قبل تنفيذ إجراء DragNDrop System.out.println ("تكبير النافذة ...") ؛ driver.manage (). window (). تكبير () ؛ Thread.sleep (3000 لتر) ؛ // إطلاق نموذج علامة OpenLayers 2.x System.out.println ("إطلاق نموذج علامة OpenLayers 2.x ...") ؛ Thread.sleep (3000 لتر) ؛ driver.get ("http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/markers.html") ؛ // إنشاء مثيل إجراء جديد System.out.println ("إنشاء مثيل إجراء جديد ...") ؛ قانون الإجراءات = إجراءات جديدة (سائق) ؛ // ابحث عن منفذ العرض بالداخل في الساحرة هناك خريطة System.out.println ("ابحث عن منفذ العرض بالداخل في الساحرة توجد الخريطة ...") ؛ Thread.sleep (3000 لتر) ؛ // WebElement el = driver.findElement (By.id ("OpenLayers_Map_2_OpenLayers_ViewPort")) ؛ WebElement el = driver.findElement (By.className ("olAlphaImg")) ؛ // ابدأ تسلسل الإجراء System.out.println ("بدء تسلسل الإجراء ...") ؛ Thread.sleep (3000 لتر) ؛ act.click (). Perform () ؛ // نفذ عملية النقر التي تفتح نافذة جديدة // تحديد العلامة System.out.println ("تحديد العلامة في 285 ، 111 ...") ؛ Thread.sleep (3000 لتر) ؛ act.moveToElement (el، 285، 111). انقر فوق (). build (). Perform () ؛ // Print TEST = OK !! System.out.println ("TEST = OK !!")؛ //driver.quit () ؛ }}

في هذه الحالة ، يتمثل الحل في أن تضع في اعتبارك أن العلامات موجودة مباشرة على صورة الخريطة ، لذا فهي مكونات لصفحة المتصفح ، لذلك عليك الرجوع إلى العنصر الصحيح.

الكود "الأساسي" هو حول هذه الصفوف

// WebElement el = driver.findElement (By.id ("OpenLayers_Map_2_OpenLayers_ViewPort")) ؛ WebElement el = driver.findElement (By.className ("olAlphaImg")) ؛

الصف الذي تم التعليق عليه هو صف الرمز الخطأ الذي يشير إلى منفذ العرض ، ويشير صف الكود الصحيح إلى الكائن "olAlphaImg".

هذا كل شئ!

آمل أن يكون هذا مفيدًا للآخرين!

سيزار


شاهد الفيديو: Selenium - Selenium IDE for Beginners Automated Web Testing