[Tutor] How to pass command line variables to this python code...

vince spicer vinces1979 at gmail.com
Tue Jul 14 21:57:32 CEST 2009


Sorry I do remember that issue in the past, the unittest.main takes over the
cli variables in order to select modules to run

python selenium-google-test.py --help

so unittest is assuming yankees is a test module, you can override this
functionality however with:

unittest.main(argv=['mytestapp'])

this will cause the default run all test modules, and allow you to access
the argv

Hope that helps

Vince



On Tue, Jul 14, 2009 at 1:36 PM, J Cook <jcook713 at gmail.com> wrote:

> Ok,
>
> So I added the following:
>
> <code>
> from selenium import selenium
> import unittest, time, re
> import sys # added this
>
> q = sys.argv[1] # added this
> print q # added this just to see
>
> class NewTest(unittest.TestCase):
>    def setUp(self):
>        self.verificationErrors = []
>        self.selenium = selenium("localhost", 4444, "*chrome", "
> http://www.google.com/")
>        self.selenium.start()
>
>    def test_new(self):
>        sel = self.selenium
>        sel.open("/")
>        sel.type("q", q) # this is where I want the argument to end up
>
>    def tearDown(self):
>        self.selenium.stop()
>        self.assertEqual([], self.verificationErrors)
>
> if __name__ == "__main__":
>    unittest.main()
> </code>
>
> I run the following:
>
> $ python selenium-google-test.py yankees
> yankees
> Traceback (most recent call last):
>  File "selenium-google-test.py", line 24, in <module>
>    unittest.main()
>  File "/usr/lib/python2.6/unittest.py", line 816, in __init__
>    self.parseArgs(argv)
>  File "/usr/lib/python2.6/unittest.py", line 843, in parseArgs
>    self.createTests()
>  File "/usr/lib/python2.6/unittest.py", line 849, in createTests
>    self.module)
>  File "/usr/lib/python2.6/unittest.py", line 613, in loadTestsFromNames
>    suites = [self.loadTestsFromName(name, module) for name in names]
>  File "/usr/lib/python2.6/unittest.py", line 584, in loadTestsFromName
>    parent, obj = obj, getattr(obj, part)
> AttributeError: 'module' object has no attribute 'yankees'
>
> How do I get the argument over to where I need it to be?
>
> Justin
>
> vince spicer wrote:
>
>> First off, selenium is a great tool and the python driver is very powerful
>>
>> there are numerous ways to access cli variables,
>>
>> the quickest
>>
>> import sys
>> print sys.srgv
>>
>> sys.argv will it output a array of all command line args
>>
>> ./selenium-google-test.py yankees
>> will out put:
>>
>> ['selenium-google-test.py', 'yankees']
>>
>> so
>>
>> args = sys.argv
>>
>> args[0] == 'yankees'
>> True
>>
>> for a more functional way, check out
>> http://docs.python.org/library/getopt.html
>>
>>
>>
>> On Tue, Jul 14, 2009 at 11:11 AM, J Cook <jcook713 at gmail.com <mailto:
>> jcook713 at gmail.com>> wrote:
>>
>>    Hello,
>>
>>    I have some autogenerated code from Selenium which I cannot figure
>>    out how to pass some command line variables to. For example I could
>>    export the same in Perl and it would be for example:
>>
>>    <code>
>>    use strict;
>>    use warnings;
>>    use Time::HiRes qw(sleep);
>>    use Test::WWW::Selenium;
>>    use Test::More "no_plan";
>>    use Test::Exception;
>>
>>    my $sel = Test::WWW::Selenium->new( host => "localhost",
>>                                       port => 4444,
>>                                       browser => "*chrome",
>>                                       browser_url =>          "
>> http://www.google.com/" );
>>
>>    $sel->open_ok("/");
>>    $sel->type_ok("q", "red sox");
>>    </code>
>>
>>    I could then go in and add something like:
>>
>>    my ($arg1) = shift || "default";
>>
>>    which would pick up the first command line parameter and then I
>>    could do something like:
>>
>>    $sel->(type_ok, $arg1);
>>
>>    All is good here, now Selenium will export the following for Python:
>>
>>    <code>
>>    from selenium import selenium
>>    import unittest, time, re
>>
>>    class NewTest(unittest.TestCase):
>>       def setUp(self):
>>           self.verificationErrors = []
>>           self.selenium = selenium("localhost", 4444, "*chrome",
>>    "http://www.google.com/")
>>           self.selenium.start()
>>
>>       def test_new(self):
>>           sel = self.selenium
>>           sel.open("/")
>>           sel.type("q", "red sox")
>>
>>       def tearDown(self):
>>           self.selenium.stop()
>>           self.assertEqual([], self.verificationErrors)
>>
>>    if __name__ == "__main__":
>>       unittest.main()
>>    </code>
>>
>>    Now I am confused on how to pass a command line parameter here. Any
>>    suggestions? I would like to be able to run something like:
>>
>>    $ python selenium-google-test.py "yankees"
>>
>>    Suggestions?
>>
>>
>>    TIA
>>
>>    Justin
>>    _______________________________________________
>>    Tutor maillist  -  Tutor at python.org <mailto:Tutor at python.org>
>>    http://mail.python.org/mailman/listinfo/tutor
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20090714/7df6b3cd/attachment.htm>


More information about the Tutor mailing list