بيئة :
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.
على 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)
@ christian-bromann يسعدني إغلاق المشكلة نظرًا لوجود حل بديل عملي ومختبر.
شكرا لك
لا أستطيع أن أجعل هذا الحل يعمل معه. حاولت استخدام اسم الفصل مباشرة على switchToFrame وما زلت أرى نفس المشكلة The specified frame was not found in the current frame or window.
. فقط لفهم الحل البديل بشكل صحيح ، هل يجب أن أقدم اسم الفصل أو المعرف مباشرة في browser.switchToFrame(id or classname)
. هل هذا صحيح؟
تحديث: هذا الحل يعمل مع الكروم ، أي والحافة. لا يعمل لرحلات السفاري
التعليق الأكثر فائدة
لقد وجدت حلاً لهذه المشكلة بناءً على كل من:
سيعمل هذا على Chrome و FireFox و Ms Edge و IE11 و Safari كلها ضمن BrowserStack
let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)