பிழைத்திருத்தம்
பல செயல்முறைகள் பல உலாவிகளில் பல சோதனைகளைத் தூண்டும்போது பிழைத்திருத்தம் கணிசமாக சிரமமாக இருக்கும்.
முதலில், maxInstances
ஐ 1
என அமைப்பதன் மூலமும், பிழைத்திருத்தப்பட வேண்டிய அந்த குறிப்பிட்ட விவரக்குறிப்புகள் மற்றும் உலாவிகளை மட்டும் இலக்காகக் கொள்வதன் மூலமும் இணைப்பையக் கட்டுப்படுத்துவது மிகவும் பயனுள்ளதாக இருக்கும்.
wdio.conf
இல்:
export const config = {
// ...
maxInstances: 1,
specs: [
'**/myspec.spec.js'
],
capabilities: [{
browserName: 'firefox'
}],
// ...
}
பிழைத்திருத்த கட்டளை
பல சந்தர்ப்பங்களில், உங்கள் சோதனையை இடைநிறுத்தி உலாவியைப் பரிசோதிக்க நீங்கள் browser.debug()
ஐப் பயன்படுத்தலாம்.
உங்கள் கட்டளை வரி இடைமுகமும் REPL முறைக்கு மாறும். இந்த முறையானது கட்டளைகள் மற்றும் பக்கத்தில் உள்ள உறுப்புகளுடன் விளையாட அனுமதிக்கிறது. REPL முறையில், உங்கள் சோதனைகளில் செய்யக்கூடிய browser
பொருளை அல்லது $
மற்றும் $$
செயல்பாடுகளை அணுகலாம்.
browser.debug()
ஐப் பயன்படுத்தும் போது, அதிக நேரம் எடுப்பதற்காக சோதனை இயக்கி சோதனையை தோல்வியடையச் செய்வதைத் தடுக்க சோதனை இயக்கியின் காலமுடிவை நீங்கள் அதிகரிக்க வேண்டியிருக்கும். எடுத்துக்காட்டாக:
wdio.conf
இல்:
jasmineOpts: {
defaultTimeoutInterval: (24 * 60 * 60 * 1000)
}
மற்ற கட்டமைப்புகளைப் பயன்படுத்தி அதைச் செய்வது எப்படி என்பது பற்றிய கூடுதல் தகவலுக்கு காலநேர முடிவுகள் ஐப் பார்க்கவும்.
பிழைத்திருத்தலுக்குப் பிறகு சோதனைகளைத் தொடர, ஷெல்லில் ^C
குறுக்குவழியைப் பயன்படுத்தவும் அல்லது .exit
கட்டளையைப் பயன்படுத்தவும்.
டைனமிக் கான்ஃபிகரேஷன்
wdio.conf.js
ஜாவாஸ்கிரிப்ட் கொண்டிருக்கலாம் என்பதை கவனிக்கவும். நீங்கள் நிரந்தரமாக உங்கள் காலமுடிவு மதிப்பை 1 நாள் என மாற்ற விரும்பாததால், கட்டளை வரியிலிருந்து சூழல் மாறியைப் பயன்படுத்தி இந்த அமைப்புகளை மாற்றுவது அடிக்கடி பயனுள்ளதாக இருக்கும்.
இந்த நுட்பத்தைப் பயன்படுத்தி, கட்டமைப்பை டைனமிக்காக மாற்றலாம்:
const debug = process.env.DEBUG
const defaultCapabilities = ...
const defaultTimeoutInterval = ...
const defaultSpecs = ...
export const config = {
// ...
maxInstances: debug ? 1 : 100,
capabilities: debug ? [{ browserName: 'chrome' }] : defaultCapabilities,
execArgv: debug ? ['--inspect'] : [],
jasmineOpts: {
defaultTimeoutInterval: debug ? (24 * 60 * 60 * 1000) : defaultTimeoutInterval
}
// ...
}
பின்னர் wdio
கட்டளையை debug
கொடியுடன் முன்னொட்டாகப் பயன்படுத்தலாம்:
$ DEBUG=true npx wdio wdio.conf.js --spec ./tests/e2e/myspec.test.js
...மற்றும் DevTools உடன் உங்கள் விவரக்குறிப்பு கோப்பை பிழைத்திருத்தலாம்!
Visual Studio Code (VSCode) உடன் பிழைத்திருத்தல்
சமீபத்திய VSCode இல் முறிவுப் புள்ளிகளுடன் உங்கள் சோதனைகளை பிழைத்திருத்த விரும்பினால், பிழைத்திருத்தியைத் தொடங்க உங்களுக்கு இரண்டு விருப்பங்கள் உள்ளன, அவற்றில் விருப்பம் 1 எளிதான முறையாகும்:
- தானாகவே பிழைத்திருத்தியை இணைத்தல்
- உள்ளமைவு கோப்பைப் பயன்படுத்தி பிழைத்திருத்தியை இணைத்தல்
VSCode டாகிள் ஆட்டோ அட்டாச்
VSCode இல் பின்வரும் படிகளைப் பின்பற்றுவதன் மூலம் பிழைத்திருத்தியைத் தானாகவே இணைக்கலாம்:
- CMD + Shift + P (லினக்ஸ் மற்றும் macOS) அல்லது CTRL + Shift + P (விண்டோஸ்) ஐ அழுத்தவும்
- உள்ளீட்டுப் புலத்தில் "attach" என்று தட்டச்சு செய்யவும்
- "Debug: Toggle Auto Attach" ஐத் தேர்ந்தெடுக்கவும்
- "Only With Flag" ஐத் தேர்ந்தெடுக்கவும்
அவ்வளவுதான்! இப்போது நீங்கள் உங்கள் சோதனைகளை இயக்கும்போது (முன்னர் காட்டியபடி உங்கள் கட்டமைப்பில் --inspect கொடியை அமைக்க வேண்டும் என்பதை நினைவில் கொள்ளுங்கள்) தானாகவே பிழைத்திருத்தியைத் தொடங்கி, அது அடையும் முதல் முறிவுப் புள்ளியில் நிறுத்தும்.
VSCode கான்ஃபிகரேஷன் கோப்பு
அனைத்து அல்லது தேர்ந்தெடுக்கப்பட்ட விவரக்குறிப்பு கோப்பு(களை) இயக்க முடியும். தேர்ந்தெடுக்கப்பட்ட விவரக்குறிப்பை பிழைத்திருத்த, .vscode/launch.json
இல் பிழைத்திருத்த கட்டமைப்பு(கள்) சேர்க்கப்பட வேண்டும், பின்வரும் கட்டமைப்பைச் சேர்க்கவும்:
{
"name": "run select spec",
"type": "node",
"request": "launch",
"args": ["wdio.conf.js", "--spec", "${file}"],
"cwd": "${workspaceFolder}",
"autoAttachChildProcesses": true,
"program": "${workspaceRoot}/node_modules/@wdio/cli/bin/wdio.js",
"console": "integratedTerminal",
"skipFiles": [
"${workspaceFolder}/node_modules/**/*.js",
"${workspaceFolder}/lib/**/*.js",
"<node_internals>/**/*.js"
]
},
அனைத்து விவரக்குறிப்பு கோப்புகளையும் இயக்க "args"
இலிருந்து "--spec", "${file}"
ஐ அகற்றவும்
உதாரணம்: .vscode/launch.json
கூடுதல் தகவல்: https://code.visualstudio.com/docs/nodejs/nodejs-debugging
Atom உடன் டைனமிக் Repl
நீங்கள் ஒரு Atom ஹேக்கராக இருந்தால், @kurtharriger உருவாக்கிய wdio-repl
ஐ முயற்சிக்கலாம், இது தனிப்பட்ட குறியீட்டு வரிகளை Atom இல் இயக்க அனுமதிக்கும் ஒரு டைனமிக் repl ஆகும். டெமோவைப் பார்க்க இந்த YouTube வீடியோவைப் பார்க்கவும்.
WebStorm / Intellij உடன் பிழைத்திருத்தல்
நீங்கள் இது போன்ற node.js பிழைத்திருத்த கட்டமைப்பை உருவாக்கலாம்:
கட்டமைப்பை எவ்வாறு உருவாக்குவது என்பது பற்றிய கூடுதல் தகவலுக்கு இந்த YouTube வீடியோவைப் பார்க்கவும்.
அசாதாரணமான சோதனைகளின் பிழைத்திருத்தல்
அசாதாரணமான சோதனைகளை பிழைத்திருத்துவது உண்மையிலேயே கடினமாக இருக்கும், எனவே உங்கள் CI இல் கிடைத்த அசாதாரணமான முடிவை உள்ளூரில் எப்படி மீண்டும் உருவாக்க முயற்சிக்கலாம் என்பதற்கான சில குறிப்புகள் இங்கே உள்ளன.
நெட்வொர்க்
நெட்வொர்க் தொடர்பான அசாதாரண நிலையை பிழைத்திருத்த throttleNetwork கட்டளையைப் பயன்படுத்தவும்.
await browser.throttleNetwork('Regular3G')
ரெண்டரிங் வேகம்
சாதன வேகம் தொடர்பான அசாதாரண நிலையை பிழைத்திருத்த throttleCPU கட்டளையைப் பயன்படுத்தவும். இது உங்கள் பக்கங்கள் மெதுவாக காட்சிப்படுத்த காரணமாகும், இது உங்கள் சோதனைகளை மெதுவாக்கக்கூடிய உங்கள் CI இல் பல செயல்முறைகளை இயக்குவது போன்ற பல காரணங்களால் ஏற்படலாம்.
await browser.throttleCPU(4)
சோதனை செயலாக்க வேகம்
உங்கள் சோதனைகள் பாதிக்கப்படவில்லை என்று தோன்றினால், WebdriverIO முன்னணி கட்டமைப்பு / உலாவியிலிருந்து புதுப்பிப்பை விட வேகமாக இருக்கக்கூடும். WebdriverIO இந்த உறுதிப்படுத்தல்களை இனி மீண்டும் முயற்சிக்க வாய்ப்பில்லாததால், ஒத்திசைவான உறுதிப்படுத்தல்களைப் பயன்படுத்தும்போது இது நிகழ்கிறது. இதனால் சிதைக்கக்கூடிய குறியீட்டின் சில எடுத்துக்காட்டுகள்:
expect(elementList.length).toEqual(7) // உறுதிப்படுத்தல் நேரத்தில் பட்டியல் நிரப்பப்படாமல் இருக்கலாம்
expect(await elem.getText()).toEqual('this button was clicked 3 times') // உறுதிப்படுத்தலின் போது உரை இன்னும் புதுப்பிக்கப்படாததால் பிழை ஏற்படலாம் ("this button was clicked 2 times" என்பது எதிர்பார்க்கப்பட்ட "this button was clicked 3 times" உடன் பொருந்தவில்லை)
expect(await elem.isDisplayed()).toBe(true) // இன்னும் காட்டப்படாமல் இருக்கலாம்
இந்தப் பிரச்சினையைத் தீர்க்க, ஒத்திசைவற்ற உறுதிப்படுத்தல்களைப் பயன்படுத்த வேண்டும். மேலே உள்ள எடுத்துக்காட்டுகள் இவ்வாறு இருக்கும்:
await expect(elementList).toBeElementsArrayOfSize(7)
await expect(elem).toHaveText('this button was clicked 3 times')
await expect(elem).toBeDisplayed()
இந்த உறுதிப்படுத்தல்களைப் பயன்படுத்தி, நிபந்தனை பொருந்தும் வரை WebdriverIO தானாகவே காத்திருக்கும். உரையை உறுதிப்படுத்தும்போது, உறுப்பு இருக்க வேண்டும் மற்றும் உரை எதிர்பார்க்கப்படும் மதிப்புக்கு சமமாக இருக்க வேண்டும் என்று இதன் பொருள். எங்கள் சிறந்த பயிற்சிகள் வழிகாட்டியில் இதைப் பற்றி அதிகம் பேசுகிறோம்.