Monday 28 December 2015

Automate the boring stuff with Python

If you are an office worker, student, administrator, or just want to become more productive with your computer, programming will allow you to write code than can automate tedious tasks. 

... And how to begin? There are 3 sources available

Online tutorial:
https://automatetheboringstuff.com/

Or you can buy it as a book on Amazon:
http://www.amazon.co.uk/Automate-Boring-Stuff-Python-Programming/dp/1593275994 

Or you can take an online course on Udemy following the book above, the default price is £48:
https://www.udemy.com/automate/?dtcode=loBQEjb4fb6Z

Or if you want to get the course for free, find it on Youtube:
https://www.youtube.com/channel/UCRjTEkDLPREZNlREZMlotMQ

Wednesday 14 October 2015

Python Webdriver perform mouseover - hover over an element

Follow simple example below done on site http://www.flipkart.com/. Mouseover is done over menu item ELECTRONICS. Have fun

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
#
driver = webdriver.Firefox()
#
# Test Page = http://www.flipkart.com/
#
driver.get('http://www.flipkart.com')
#
electronics_lnk = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/div[2]/div/div/ul/li[1]/a/span')
#
hover = ActionChains(driver).move_to_element(electronics_lnk)
driver.implicitly_wait(5)
#
# Pop-up msg appears we need to get rid of it via ESCAPE key
hover.send_keys(webdriver.common.keys.Keys.ESCAPE)
#
driver.implicitly_wait(5)
# mouseover is performed over menu ELECTRONICCS
hover.perform()

Monday 24 August 2015

Python with Webdriver - launch Firefox and Chrome browser

def setUp_and_login(browser):
        '''
        Supported browsers are: firefox; chrome
        '''
        #
        if browser == 'firefox':
            driver = webdriver.Firefox()
        elif browser == 'chrome':
            driver = webdriver.Chrome('Location of Chromedriver utility')
        else:
            print('')
            print('Browser not recognized, exiting...')
            print('')
            exit()



Sunday 16 August 2015

Purpose of self in Python

from selenium import webdriver
#
Class MyClass:
    def function(self):
        self.driver = webdriver.Firefox()

What is the purpose of SELF here:
"
self is an object reference to the object itself, therefore, they are same. Python methods are not called in the context of the object itself. self in Python may be used to deal with custom object models or something.
"

"
The self variable refers to the object itself.
"

Source:
http://stackoverflow.com/questions/2709821/what-is-the-purpose-of-self-in-python
 

Sunday 9 August 2015

Python Modules - how to find location of module sources

Let's assume we want to find the source of Python module Selenium.

In Python Shell:

>>> import selenium
>>>
>>> selenium.__file__
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/__init__.pyc'
>>>

Thursday 11 June 2015

Python & Webdriver - Resize & Maximize Browser window

# Import modules
from selenium import webdriver
#
# get initial window size
driver = webdriver.Firefox()
print driver.get_window_size()
#
# set window size (windth, height) in pixels
driver.set_window_size(480, 320)
#
# Print new size
print(driver.get_window_size())
#
# maximize window
driver.maximize_window()
#
# Print new size
print(driver.get_window_size())
#
driver.quit()

Sunday 31 May 2015

Python Interview Questions

Software testing - Questions and Answers - Python Interview Questions
  1. Question: How Python can be used in software testing?
    Answer:
    1. To generate test data; parse test results; generate reports; testing API calls etc.
    2. Python to extract requirements from a Word document.
    3. For testing tasks automation, setting up environments for tests, extracting performance data, etc...
    4. Testers use Python extensively in many companies with Selenium for test automation.
    5. For writing desktop applications used by testers.
    6. Test data manipulation.
    7. To build test environment
    8. Testing with IronPython on .NET
  2. Question:What Python frameworks do you know?
    Answer:Framework called Web2py, PAMIE (Python automation Module for I. E.), The py.test framework
  3. Question:What tools that helps Python development do you know?
    Answer:There are good tools for helping Python development such as Notepad++ with the PyNPP plugin and Eclipse with PyDev and PyUnit.
  4. The following is displayed by a print function call:
    yesterday
    today
    tomorrow
    Please write an example of a print function.
    Answer: print('yesterday\ntoday\ntomorrow')
  5. The following is displayed by a print function call:
    hello-how-are-you

    Please write an example of a print function.
    Answer: print('hello' + '-' + 'how' + '-' + 'are' + '-' + 'you')
  6. Question: What does the expression len('') evaluate to?
    Answer: 0
  7. Considering the following code:
    s = 'catandapple'
    Write an expression that evaluate to 'apple'.
    Answer: s[-5:]
  8. Question: Write an expression that evaluate to True
    Answer: len('aaddgg') == 6
  9. Question: Write the code that calculate the sum of even numbers from x1 till x2
  10. Question: What are "tuples"
    Answer: Tuples are immutable sequences: they cannot be modified. Tuples use parentheses instead of square brackets: tup = ('test', 5, -0.2)
  11. Question: What are the rules for legal Python names?
    Answer:
    1. Names must start with a letter or _.
    2. Names must contain only letters, digits, and _.
  12. Question: What is the dictionary tipe in Python?
    How to Access Information From Dictionaries and Modify it?
  13. To display a value in the console, what Python keyword do you use? (Print)
  14. Python file names traditionally end in what characters after a period? (.py)
  15. An if statement can have how many elif parts? (Unlimited, i.e., 0 or more)
  16. How many control objects are allowed in a frame? (Unlimited, i.e., 0 or more)
  17. When you enter text into an input field and press enter, the text is passed to the input field's event handler.
    What is the data type of the text? (string)
  18. What does the draw handler parameter represent? (The canvas)
  19. What happens if you draw text outside the canvas coordinates?
  20. You want a timer to create exactly 1000 events. Suggest any solutions.
    (Have a global counter for the number of timer calls. In the timer handler, increment the counter. In the timer handler, check the count and possibly stop the timer.)
  21. How many timers can you have running at once? (Unlimited)
  22. Give example of list - [1, 2, 3]
  23. Give example of Tuple - (1, 2, 3)
  24. Which types of data are immutable in Python? (Numbers, Tuples, Strings, Booleans)
  25. Which types of data are mutable in Python? (List)

Python Webdriver - Common Keys

In this article, I want to introduce the common keys in Webdriver. The keys are used to simulate a user entering a key on the keyboard. Back space, enter, ALT, ESCAPE; these are the types of keys I am talking about. The place where this would be useful is, for example, the enter key could be used to submit a form in a web application. In the previous Hello World example, we entered the text 'Hello World!' into a search bar and then execute the search with a separate submit command. Another way we could have achieved the same result is to include the enter key at the end of the 'Hello World!' string.

As an example, below is a script to enter text into an input element to search the Yale University course catalog. The search string we will use is 'engl1*' which should return a list of all the one hundred level english courses.

#!/usr/bin/env python                                                         
from sys import argv
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

def yale_courses(s):

        # start Firefox                                                       
        driver = webdriver.Firefox()

        # navigate to the Yale course catalog                                 
        driver.get('http://students.yale.edu/oci/search.jsp')

        # find the Course number input page element                           
        input = driver.find_element_by_name('CourseNumber')

        # Enter the search string into the input element                       
        input.send_keys(s)

        # Take a screen shot                                                   
        driver.save_screenshot('english_search')

        # Execute search                                                       
        input.send_keys(Keys.RETURN)

        # Finished                                                             
        driver.close()


if __name__=='__main__':
        course = argv[1]
        yale_courses(course)

Sunday 25 January 2015

Python - Extract lines from text file starting with From

Source file:

Let's assume text file containing bunch of lines while some of them start with "From". As an example such a line can look like following:

From louis@media.berkeley.edu Fri Jan  4 18:10:48 2008

What we are trying to do is to parse all the lines from the source file starting with "From" and have them written line by line as a list and at the end count number of lines matching our criteria.


Python code is then as per following:

fname = raw_input("Enter file location: ")
# source file, e.g. C:\Python34\Doc\SourceFile.txt
fh = open(fname)
count = 0
lst = list()
for line in fh:
    line = line.rstrip("\n")
    if line.startswith("From "):
        count = count + 1
        lst.append(line.split())
#
# Define initial item in a list
i = 1
for i in lst:
    # print second item in each list
    print i[1]
#
print "There were", count, "lines in the file with From as the first word"


Example of results:

stephen.marquard@uct.ac.za
louis@media.berkeley.edu
zqian@umich.edu
rjlowe@iupui.edu
zqian@umich.edu

rjlowe@iupui.edu
...
There were 15 lines in the file with From as the first word

Saturday 3 January 2015

Python - Parse XML file

# ==================================================================
# >> Short Description: 
# Script searches for xml file in given root directory matching
# given pattern and prints selected file to xml
#
# >> Author: Tomas Nemeth
# >> Creation Date: 12/2014
# ==================================================================
#
#-- Import Python modules -----------
import os
import fnmatch
import sys
import xml.etree.ElementTree as ET
from xml.dom import minidom
#------------------------------------
#
#
rootPath = str(input("Insert root path: ")) # e.g. C:\Python34\Doc\ScriptTest
pattern = str(input("Insert file pattern: ")) # including wildcards, e.g. "data*"
print('=================================================')

# Search for the files matching given directory & pattern
for root, dirs, files in os.walk(rootPath):
    for filename in fnmatch.filter(files, pattern):
        print(os.path.join(root, filename)) # prints the results
#
# User is asked here to select one file from list for parsing
print('=========================================')
file = str(input("Select one file from list for parsing: "))
print('=========================================')
#
# get the root
tree = ET.parse(file)
root = tree.getroot()
#
# Function prints selected file as whole xml
xmldoc = minidom.parse(file)
print(xmldoc.toxml())
#
print('==========================================')
print('')