1

I'm new to Selenium and am trying to understand how to pass parameters to a selenium script.

Normally if I call a python script with a parameter like this python myprogram.py myparameter from the command line, I can lookup the parameter in sys.argv[1] (assuming that I import sys)

An autogenerated selenium script looks like this: (I already tried to add sys.argv[1] to it)

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
import sys


class ParaN(unittest.TestCase):


    def setUp(self):

        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://www.google.de/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_para(self):

        driver = self.driver
        driver.get(self.base_url + "?q=" + sys.argv[1])
        print(driver.current_url )




    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e: return False
        return True

    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException, e: return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

This example is supposed to call google with a parameter as a search term.

But unittest.main() doesn't accept parameters and I don't understand what happens when unittest.main() runs, yet.

What's the best approach to add parameters to this?

1 Answer 1

2

unittest.main() parses everything you pass on a command-line:

A command-line program that loads a set of tests from module and runs them; this is primarily for making test modules conveniently executable.

One alternative would be to use a TestLoader instead. Replace:

unittest.main()

with:

runner = unittest.TextTestRunner()
suite = unittest.TestLoader().loadTestsFromTestCase(ParaN)
runner.run(suite)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.