Webdriverio: تعذر استخدام browser.switchToFrame () على MS Edge

تم إنشاؤها على ٢٤ أبريل ٢٠١٩  ·  3تعليقات  ·  مصدر: webdriverio/webdriverio

بيئة :

  • إصدار WebdriverIO: ["webdriverio": "^ 5.7.15"]
  • الوضع: [WDIO Testrunner / BROWSERSTACK]
  • إذا كان WDIO Testrunner ، يتم تشغيل المزامنة / غير المتزامن: [sync]
  • إصدار Node.js: [v8.11.3]
  • إصدار NPM: [5.6.0]
  • اسم المتصفح وإصداره
  • اسم النظام الأساسي وإصداره
  • حزم wdio الإضافية المستخدمة (إن وجدت): تتم استضافة نموذج مشروع بنفس المشكلة على GitHub

package.json

"dependencies": {
    "browserstack-local": "^1.3.7",
    "config": "^1.28.1",
    "uuid": "^3.1.0",
    "webdriverio": "^5.7.15"
  },
  "devDependencies": {
    "config": "^1.28.1",
    "@wdio/cli": "^5.7.15",
    "@wdio/local-runner": "^5.7.15",
    "@wdio/mocha-framework": "^5.7.14",
    "@wdio/sync": "^5.7.13"
  }

تكوين WebdriverIO

exports.config = {
    user: process.env.BROWSERSTACK_USERNAME || 'XXX',
    key: process.env.BROWSERSTACK_ACCESS_KEY || 'YYY',
    specs: [
        './test/specs/**/*.js'
    ],
    // Patterns to exclude.
    exclude: [
        // 'path/to/excluded/files'
    ],
    maxInstances: 10,
    capabilities: [
        // Chrome and all other browsers work fine
        // {
        //     browser: 'Chrome',
        //     resolution: '1280x1024',
        //     os: 'Windows',
        //     os_version: '10',
        //     name: 'Chrome',
        //     project: 'TT UI',            
        //     'browserstack.networkLogs': true
        // },
        {
            browserName: 'Edge',
            browser_version: '18.0',
            resolution: '2048x1536',
            os: 'Windows',
            os_version: '10',
            name: 'Microsoft EDGE',
            project: 'TT UI',           
            'browserstack.networkLogs': true
        }
    ],
    // Level of logging verbosity: trace | debug | info | warn | error | silent
    logLevel: 'debug',
    waitforTimeout: 10000,
    connectionRetryTimeout: 90000,
    connectionRetryCount: 3,
    framework: 'mocha',
    mochaOpts: {
        ui: 'bdd',
        timeout: 60000
    }
}

صف الخلل
لا يتحول الأمر browser.switchToFrame () إلى iFrames على إصدارات Microsoft Edge 16 و 17 و 18. يعمل نفس الأمر ومقتطف الشفرة (راجع قسم إعادة الإنتاج) على Chrome و FireFox و Safari و IE11.

لإعادة إنتاج

npm run test:local الرجاء التأكد من بدء تشغيل برنامج تشغيل المتصفح
npm run test:remote يرجى التأكد من أنك أدخلت BrowserStack الخاص بك user و key في wdio.remote.conf.js

بمجرد تشغيل الاختبار البسيط ، يظهر خطأ عند browser.switchToFrame(parentFrame) بالرسالة التالية ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.

  • الخيارات 2

على Ms Edge -Preferably BrowserStack ، لكن هذا لا ينبغي أن يحدث أي فرق - قم بتشغيل الأمر browser.switchToFrame(element) أو browser.switchToFrame(element.elementId) وستجد نفس الخطأ الموضح في الخيار 1

سلوك متوقع
السلوك المتوقع هو القدرة على التبديل إلى iFrame والقدرة على استرداد العناصر وتحديد موقعها بداخله على MS Edge.

سجل

وحدة التحكم بتسجيل وتقاسم السجلات wdio هنا جوهر

سياق إضافي
في البداية تم طرح هذا السؤال في قناة Gitter ، وتمت مناقشته مع @ christian-bromann اليوم ، وأوصى بإنشاء مشكلة هنا بمزيد من التفاصيل.
يرجى ملاحظة أنني تحققت أيضًا من هذه المشكلة 3774 ولكن يبدو أنها غير مرتبطة لأن الكود الذي قمت بمشاركته على GitHub (انظر القسم أعلاه) يعمل بشكل مثالي على جميع المتصفحات باستثناء Edge

التعليق الأكثر فائدة

لقد وجدت حلاً لهذه المشكلة بناءً على كل من:

سيعمل هذا على Chrome و FireFox و Ms Edge و IE11 و Safari كلها ضمن BrowserStack

let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)

ال 3 كومينتر

لقد وجدت حلاً لهذه المشكلة بناءً على كل من:

سيعمل هذا على Chrome و FireFox و Ms Edge و IE11 و Safari كلها ضمن BrowserStack

let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)

@ christian-bromann يسعدني إغلاق المشكلة نظرًا لوجود حل بديل عملي ومختبر.
شكرا لك

لا أستطيع أن أجعل هذا الحل يعمل معه. حاولت استخدام اسم الفصل مباشرة على switchToFrame وما زلت أرى نفس المشكلة The specified frame was not found in the current frame or window. . فقط لفهم الحل البديل بشكل صحيح ، هل يجب أن أقدم اسم الفصل أو المعرف مباشرة في browser.switchToFrame(id or classname) . هل هذا صحيح؟

تحديث: هذا الحل يعمل مع الكروم ، أي والحافة. لا يعمل لرحلات السفاري

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات