-
Search Results-ஐ வெளிப்படுத்தல்
இந்த வலைத்தளத்தின் searchbox-ல் சென்று “Bed & Bath” எனக் கொடுக்கும்போது, அது பின்வருமாறு 12 விடைகளை வெளிப்படுத்துகிறது.
இதை automate செய்வதற்கான code பின்வருமாறு அமையும்.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
from selenium import webdriver a = webdriver.Firefox() a.get("http://magento-demo.lexiconn.com/") a.maximize_window() a.find_element_by_xpath("//input[@id='search']").send_keys("Bed & Bath") a.find_element_by_xpath("//button[@title='Search']").click() lis = a.find_elements_by_xpath("//h2[@class='product-name'] / a ") print str(len(lis)) + " products found" for i in lis: print i.text a.quit()
இந்தக் code-ல் உள்ள முதல் 6 வரிகளை இப்போது உங்களால் சுலபமாகப் புரிந்து கொள்ள முடியும்.
அதற்கு அடுத்த வரியான h2[@class=’product-name’] / a என்பது result-ல் (class = ‘product-name’ ) உள்ள அனைத்து இணைப்புகளையும் (<a>) தேர்ந்தெடுத்து lis எனும் variable-ல் பட்டியலாக சேமிக்கிறது. பின்னர் அவை for loop வழியாக ஒவ்வொன்றாக வெளிப்படுத்தப்படுகின்றன.
print str(len(lis)) என்பது result-ல் மொத்தம் எத்தனை இணைப்புகள் உள்ளது என்பதைக் கணக்கிட்டு வெளிப்படுத்துகிறது. அதாவது len() மூலம் பட்டியலில் உள்ள இணைப்புகளின் எண்ணிக்கை கணக்கிடப்படுகிறது. பின்னர் ஒரு எண்ணை print செய்ய முடியாது என்பதால் அந்த மதிப்பு str() மூலம் மாற்றப்பட்டு print செய்யப்படுகிறது. இதன் output பின்வருமாறு இருக்கும்.
2. assertEqual() மூலம் ஓப்பீடுகள் செய்தல்
மேற்கண்ட program-ல் “Bed & Bath” எனக் கொடுத்து தேடும்போது, அது வெளிப்படுத்தும் இணைப்புகளின் எண்ணிக்கையை எவ்வாறு கணக்கிடுவது மற்றும் வெளிப்படுத்துவது எனப் பார்த்தோம்.
இந்தப் பகுதியில் “Bed & Bath” எனக் கொடுத்து தேடும்போது, வலைத்தளமானது 12 இணைப்புகளை மட்டுமே வெளிப்படுத்த வேண்டும் என்று ஒரு condition இருந்தால் அதை எவ்வாறு program-ல் சோதிப்பது என்று பார்க்கப் போகிறோம். இதற்கு assertEqual() function பயன்படும்.
https://gist.github.com/nithyadurai87/48e6dda5018207eea83779b32c24f4f7
இந்த assertEqual() – ஐ மட்டும் நம்மால் தனியாகப் பயன்படுத்த முடியாது. ஏனெனில் இது unittest library-க்குள் TestCase எனும் class-க்குள் வரையறுக்கப்பட்டுள்ளது. எனவே நமது program-ன் முதல் வரியாக unittest-ஆனது import செய்யப்பட்டுள்ளது.
பின்னர் நாம் வரையறுத்துள்ள SearchTests க்குள் நம்மால் assertEqual-ஐப் பயன்படுத்த முடியும். ஏனெனில் இதற்குத் தேவையான TestCase class-ஆனது இங்கு argument-ஆக செலுத்தப்பட்டுள்ளது.
setUp() மற்றும் tearDown() ஆகியவை ஒரு புதிய browser-ஐ திறந்து மூடப் பயன்படுகின்றன. இந்த இரண்டு methods-ம் unittest இருக்கின்ற அனைத்து நிரல்களிலும் பயன்படுத்தப்பட வேண்டும்.
இந்த இரண்டிற்கும் நடுவில் நாம் உருவாக்கப்போகும் அனைத்து functions-ம் test_என்றே தொடங்க வேண்டும். அவ்வாறு உருவாக்கப்பட்ட test_search()-ல் தான் வலைத்தளமானது 12 இணைப்புகளை மட்டுமே வெளிப்படுத்துகிறதா எனும் சோதனை செய்யப்பட்டுள்ளது. இதற்கான நிரல்களை படித்தாலே உங்களுக்குப் புரிந்துவிடும்.
ஒவ்வொரு method-க்குள்ளும் உள்ள அனைத்து வரிகளும் self. என தொடங்கப்பட்டுள்ளத்தை கவனிக்கவும் (variable தவிர). இது இப்படித்தான். எனவே கேள்வி கேட்காமல் நீங்களும் அப்படியே பயன்படுத்தவும். அவ்வாறே கடைசியாக உள்ள if __name எனத் தொடங்கும் வரி நாம் உருவாக்கிய program-ஐ அழைத்து run செய்யப் பயன்படும். எனவே கேள்வி கேட்காமல் அதையும் கடைசியில் இணைத்துவிடவும். இதற்கான output பின்வருமாறு.
ஒருவேளை நாம் நமது program-ன் assertEqual-க்குள் 20 எனக் கொடுத்துள்ளோம். ஆனால் உண்மையில் வலைத்தளமானது 12 இணைப்புகளை மட்டுமே வெளிப்படுகிறதெனில், program-ஆனது பயனருக்கு AssertionError என்பதை வெளிப்படுத்தும். அதாவது நாம் கொடுத்துள்ளபடி இணைப்புகள் வெளிப்படவில்லை என்று இதற்கு அர்த்தம். இது பின்வருமாறு.
3. @classmethod பயன்படுத்தாவிடில் நிகழுவது
மேற்கண்ட program-ல் “Bed & Bath” எனக் கொடுத்து தேடும்போது அது வெளிப்படுத்தும் இணைப்புகளின் மதிப்பு 12-ஆக உள்ளதா என ஒரு method-க்குள் சோதித்தோம்.
இப்போது இந்த program-ல் இன்னொரு method- ஐ உருவாக்கி அதற்குள் “Bags & Luggage” எனக் கொடுத்து தேடும்போது அது 11 இணைப்புகளை வெளிப்படுத்துகிறதா என்பதை சோதிக்கப் போகிறோம்.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import unittest from selenium import webdriver class SearchTests (unittest.TestCase): def setUp(self): self.a = webdriver.Firefox() self.a.get("http://magento-demo.lexiconn.com/") self.a.maximize_window() def test_search_product1(self): self.a.find_element_by_xpath("//input[@id='search']").send_keys("Bed & Bath") self.a.find_element_by_xpath("//input[@id='search']").submit() lis = self.a.find_elements_by_xpath("//h2[@class='product-name']/a") self.assertEqual(12, len(lis)) def test_search_product2(self): self.a.find_element_by_xpath("//input[@id='search']").send_keys("Bags & Luggage") self.a.find_element_by_xpath("//input[@id='search']").submit() lis = self.a.find_elements_by_xpath("//h2[@class='product-name']/a") self.assertEqual(12, len(lis)) def tearDown(self): self.a.close() if __name__ == '__main__': unittest.main(verbosity=2)
இந்த program-ஐ run செய்யும்போது test_search_product1 எனும் முதல் சோதனைக்கு ஒருமுறை browser-ஐ திறந்து சோதனைகளை நிகழ்த்தி மூடிவிடும். அவ்வாறே test_search_product2 எனும் இரண்டாவது சோதனைக்கும் ஒருமுறை browser-ஐ திறந்து சோதனைகளை நிகழ்த்தி மூடிவிடும்.
அதாவது இந்த program-க்குள் வரையறுக்கப்பட்டுள்ள ஒவ்வொரு தனித்தனி சோதனைகளுக்கும் browser-ஆனது ஒவ்வொரு முறை தனித்தனியாக திறந்து திறந்து மூடப்படும். எனவே சோதனைகளை நிகழ்த்தி முடிப்பதற்கான நேரம் அதிகமாகிறது. இதற்கான பின்வரும் output- ல் சோதனைகள் அனைத்தும் 33.360s கால அளவில் நிகழ்த்து முடிந்திருப்பதைக் காணலாம்.
இவ்வாறு தனித்தனியாக browsers திறந்து மூடப்படுவதையும், அதனால் ஏற்படும் கால விரயத்தையும் தவிர்ப்பதற்காக வந்ததே @classmethod ஆகும்.
4. @classmethod-ன் பயன்பாடு
நமது program-ல் browser-ஐ திறப்பதற்கு முன்னர் @classmethod எனக் கொடுத்து நாம் என்னென்ன செய்ய விரும்புகிறோமோ அதற்கான methods-ஐ எல்லாம் வரையறுக்க வேண்டும். பின்னர் கடைசியாக மீண்டும் @classmethod எனக் கொடுத்து browser-ஐ மூட வேண்டும். இதுவே அனைத்து methods-ஐயும் நாம் விரும்பும் வகையில் தொடர்ச்சியாக நிகழ்த்த உதவும்.
https://gist.github.com/nithyadurai87/481ff08d99e487387f21d46ffd9b706a
இதற்கான பின்வரும் output- ல் சோதனைகள் அனைத்தும் 18.461s கால அளவில் நிகழ்த்து முடிந்திருப்பதைக் காணலாம். அதாவது @classmethod பயன்படுத்தாதபோது, இது எடுத்துக்கொண்ட கால அளவைவிட இப்போது குறைவாகவே எடுத்துக்கொண்டுள்ளது.
5. ஒரு பக்கத்தில் இருக்க வேண்டியவற்றை சோதித்தல்
magento-demo.lexiconn.com/ எனும் வலைத்தளப்பக்கத்தில் இருக்க வேண்டிய பின்வரும் முக்கிய விஷயங்களை சோதிப்பதற்கான நிரல் அதற்குக் கீழே கொடுக்கப்பட்டுள்ளது.
1. தேடும் பெட்டி
2. மொழிகளின் தேர்வுப் பட்டியல்
3. கைக்கூடை
4. எனது கணக்கு
5. விளம்பரப் படங்கள்
https://gist.github.com/nithyadurai87/4cfc026f20389af3c79953a764a9769c
இதன் output மற்றும் நிரல்களுக்கான விளக்கத்தைப் பின்வருமாறு காணலாம்.
5.1. தேடும் பெட்டி:
search எனும் பெட்டி உள்ளதா? அது பயனர் பயன்படுத்தும் வகையில் enable- ஆக உள்ளதா? அந்த பெட்டிக்குள் 128 எழுத்துக்களை செலுத்த முடியுமா? என்பது போன்ற விஷயங்களெல்லாம் test_searchbox()-க்குள் சோதிக்கப்பட்டுள்ளது.
assertTrue() என்பது
- ஒரு element உள்ளதா என்பதை சோதிப்பதற்கு .is_element_present() ஐயும்
- அது enable ஆக உள்ளதா என்பதை சோதிப்பதற்கு .is_enabled() ஐயும் பயன்படுத்தியுள்ளது.
மேலும் .get_attribute() ஐப் பயன்படுத்தி அந்த பெட்டியின் நீளம் கண்டுபிடிக்கப்பட்டு x என வைக்கப்பட்டுள்ளது. பின்னர் assertEqual() மூலம் x-ஆனது 128-உடன் ஒப்பிடப்பட்டு, அந்தப் பெட்டி 128 எழுத்துக்களைத் தாங்கும் வகையில் உருவாக்கப்பட்டுள்ளதா என்பது சோதிக்கப்பட்டுள்ளது.
5.2. மொழிகளின் தேர்வுப் பட்டியல்:
நாம் விரும்பும் மொழியினைத் தேர்ந்தெடுக்கும் பட்டியலைக் கொண்ட பெட்டி உள்ளதா என்பது test_languagebox()-க்குள் சோதிக்கப்பட்டுள்ளது.
assertTrue() என்பது இந்த element உள்ளதா என்பதை சோதிப்பதற்கு .is_element_present()-ஐப் பயன்படுத்தியுள்ளது.
5.3. கைக்கூடை:
CART iconக்கு சென்று அதன்மீது சொடுக்கும்போது, “You have no items in your shopping cart” என்று வருகிறதா என்பது test_addcart()-க்குள் சோதிக்கப்பட்டுள்ளது.
CART iconக்கு சென்று அதன்மீது சொடுக்கவும் என்பதற்கான முதல் வரி find_element_by_css_selector(“div.header-minicart span.icon”) என்று உள்ளது. இந்த icon- க்கான நிரல் <div> -ஐக் கொண்டிருப்பதால் இதனை நாம் css கொண்டு அணுக வேண்டும்.
எனவே div.அதன் class ஓர் இடைவெளி விட்டு அதற்குள் உள்ள span. அதன் class எனக் கொடுக்கப்பட்டுள்ளது. இதுவே ஒரு css element-ஐக் கண்டுபிடிப்பதற்கான முறை ஆகும்.
பின்னர் “You have no items in your shopping cart” என்பது x – லும், icon-ஐ சொடுக்கும்போது வரும் வாக்கியம், .text மூலம் எடுக்கப்பட்டு y – லும் சேமிக்கப்பட்டுள்ளது. பின்னர் assertEqual() மூலம் x,y சமமாக உள்ளதா என்பது சோதிக்கப்படுகிறது.
கடைசியாக நமக்கு தகவல் காட்டுகின்ற பெட்டியை மூடுவதற்கான நிரல் கொடுக்கப்பட்டுள்ளது.
4. எனது கணக்கு:
பின்வரும் விஷயங்கள் test_account()-க்குள் சோதிக்கப்பட்டுள்ளது.
ACCOUNT எனும் இணைப்பு உள்ளதா?
ACCOUNT, My Account எனும் 2 இணைப்புகள் உள்ளனவா?
இதற்கான நிரலில் ACCOUNTஎனும் வார்த்தையை மட்டும் கொண்ட இணைப்பு x-லும், அந்த வார்த்தையில் தொடங்கும் அல்லது முடியும் எல்லா இணைப்புகளும் y-லும் சேமிக்கப்பட்டுள்ளது. பின்னர் .is_displayed() மூலம் அந்த இணைப்பு தெரிகிறதா என்பதும், assertTrue() மூலம் அந்த வார்த்தையைக் கொண்ட 2 இணைப்புகள் (Account, My Account) உள்ளதா என்பதும் பரிசோதிக்கப்பட்டுள்ளன.
5. விளம்பரப் படங்கள்:
பின்வரும் 3 விளம்பரப் படங்கள் தென்படுகின்றனவா மேலும் நடுவில் உள்ள Shop Private Sales – Members Only எனும் படத்தின்மீது சொடுக்கும்போது VIP எனும் பெரிய படம் வருகிறதா என்பது போன்ற விஷயங்களெல்லாம் test_imgs()-க்குள் சோதிக்கப்பட்டுள்ளது.
பின்வரும் நிரலில் பார்த்தால் அந்த 3 படங்களும் promos எனும் unordered list-க்குள் உள்ளன. எனவேதான் find_element_by_class_name மூலம் promos-ல் உள்ள 3 படங்களும் x என சேமிக்கப்பட்டுள்ளன. பின்னர் len() மூலம் x-ன் நீளம் கண்டுபிடிக்கப்பட்டு அது 3 ஆக உள்ளதா என்பது சோதிக்கப்படுகிறது