קורס סלניום עם Python – חלק ב'
בחלק א' של מדריך זה למדנו כיצד ניתן להוריד ולהתקין את פייתון , למדנו קצת על פקודות השפה דרך ה-Shell שהוא למעשה Command Line שמפרש את קוד השפה ופולט תוצאה, אח”כ למדנו כיצד להטמיע את הפלאג-אין של פייתון ב-Eclipse IDE שאנו כבר מכירים.
בחלק זה של המדריך נלמד לפתוח פרוייקט חדש של פייתון ב-Eclipse , נתקין דרכו את הסלניום , נראה כיצד אנחנו מתחילים לכתוב קוד סלניומי ב-IDE ונקנח עם תוכנית בדיקה ראשונה.
התקנת סלניום על פייתון
בשביל להתחיל עם סלניום ופייתון, תחילה נראה כיצד אנו פותחים פרוייקט חדש. לאחר שפתחתם את Eclipse , הקישו על File -> New , אם לא קיים לנו עדיין PyDev Project , נקיש על Other
ומשם נבחר את PyDev Project:
נקיש על NEXT ונבחר את הערכים הבאים:
נקיש על Finish ונאשר את ההודעה הבאה:
כעת הפרוייקט שלנו אמור להיראות כך ב-Package Explorer של ה-Eclipse:
בשביל להתקין את ספריות הסלניום בפרוייקט הפייתון שלנו , נפתח Command Line ונכניס את השורה הבאה:
C:\Python27\Scripts\pip.exe install selenium
אנו אמורים לראות את התוכנית מבצעת פעולות התקנה שבסיומה יזרק לנו למסך Successfully Installed Selenium:
כעת אנו צריכים לשייך את הספריות של סלניום שהורדנו אל הפרוייקט החדש שפתחנו, אז נסמן את הפרוייקט שלנו ב-Package Explorer , נקיש עליו עם המקש הימני של העכבר ונבחר את Properties , בחלון החדש נלך ל-PyDev – PYTHONPATH , נקיש על הטאב – External Libraries ונבחר לו את הנתיב: C:\Python27\Lib\site-packages
פעולה אוטומטית בסלניום ופייתון:
נכתוב כעת את הקוד הראשון שלנו, לשם כך נעבור שוב ל-Eclipse ונפתח מודול חדש בפייתון, נקיש על File -> New -> PyDev Module :
* – הModules בפייתון מגדירים גם Templates – מה שבעיקר יעניין אותנו
נכניס שם של Package ושם של Module (ה-Packege מכיל את ה-Module):
נקיש על Finish ובשלב זה נבחר את המודול – Main:
נוצר לנו קובץ חדש עם סיומת py
נרשום בו כעת את הקוד הסלניומי שלנו בפייתון , מקרה אוטומטי פשוט מאוד, ניכנס למנוע החיפוש של גוגל , נכניס ערך ונקיש על כפתור החיפוש:
from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://www.google.com") elem = driver.find_element_by_name("q") elem.send_keys("Yoni Flenner") elem.send_keys(Keys.RETURN) driver.close()
בדיקה אוטומטית בסלניום ופייתון
אוקיי, אז אנחנו יודעים לשרבב ב-IDE כמה פקודות לאטמט פעולות עם סלניום, השלב הבא יהיה לכתוב תוכנית הממחישה בדיקה תוך כדי שימוש בכלים הנהוגים בעולם הבדיקות האמיתי (מחלקות , אנוטציות , assets וכו’).
אז תחילה ניצור מודול חדש , כמו שיצרנו בשלב הקודם, רק שהפעם נבחר Template – Unittest
הקובץ החדש שנוצר לנו אמור להיראות כך:
אנו רואים כי ה-template כבר מכיל בתוכו חלוקה למקטעים של Unit Testing שאנו כבר מכירים בסלניום מסביבות אחרות. נשתמש באותו מקרה מהסעיף הקודם , רק שהפעם נכניס גם בדיקות:
ניכנס למנוע החיפוש של גוגל , נכניס ערך ונקיש על כפתור החיפוש, ונוודא כי מילה מסויימת אינה מופיעה בתוצאות דף החיפוש:
import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class Test(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() def tearDown(self): self.driver.quit() def testName(self): driver = self.driver driver.get("http://www.google.com") assert "Google" in driver.title elem = driver.find_element_by_name("q") elem.send_keys("Yoni Flenner") elem.send_keys(Keys.RETURN) assert "Kuku" not in driver.page_source
הטסט עבר בהצלחה (המילה Kuku לא נמצאה כשחיפשתי את שמי , תודה לאל 🙂 )
כעת בואו ננסה להכשיל את הטסט , על ידי שינוי ערך ה-Assert בסוף הבדיקה:
import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys class Test(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() def tearDown(self): self.driver.quit() def testName(self): driver = self.driver driver.get("http://www.google.com") assert "Google" in driver.title elem = driver.find_element_by_name("q") elem.send_keys("Yoni Flenner") elem.send_keys(Keys.RETURN) assert "Yoni" not in driver.page_source
זה יביא אותנו אל התוצאה:
איך אני פותר את הבעיה הזאת?
C:\Users\liorge>python
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> from selenium.webdriver.common.keys import Keys
>>> driver = webdriver.Firefox()
Traceback (most recent call last):
File "", line 1, in
File "C:\Python27\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 164, in __init__
self.service.start()
File "C:\Python27\lib\site-packages\selenium\webdriver\common\service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
היי ליאו,
לפי ההודעה ה-GeckoDriver שאתה עובד איתו (אם אתה עובד איתו) לא ממוקם בנתיב הנכון