The Exception is output in the encoding of the source file.  If the terminal 
you are displaying the exception on is in a different encoding, it will be 
garbled.  I'm not familiar with OS X's terminal.  Try running python and 
printing sys.stdout.encoding.

Alternatively, wrap your code in a try/except handler and translate the 
exception yourself.

    # coding: utf-8
    import traceback
    try:
        raise Exception(u'Зарегистрироваться')
    except Exception,e:
        print traceback.format_exc().decode('utf-8')

The last line translates the utf-8 traceback into Unicode.  Printing Unicode 
will encode the output with the terminal's decoding.  If there are characters 
it can't display, you'll still get an error, though.  You can be more explicit 
however:

    print traceback.format_exc().decode('utf-8').encode('cp437','replace')

In this case you'll get ? whenever a character can't be represented in the 
selected encoding.  cp437, for example, can't display any russian characters, 
so for me (on Windows) I just get all ???????????.  When I tried it with a 
character string that could be displayed in cp437, it worked fine:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "t4.py", line 4, in <module>
        raise Exception('MàΓ£ΦΘΩδ')
    Exception: MàΓ£ΦΘΩδ

Another option is to redirect the output to a file and read the file with an 
editor that can display utf-8 (such as Notepad on Windows).

    python testfile.py 2>error.txt          # this redirects stderr to a file.

Hope that helps,
Mark
  "Oleg Oltar" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
    The code
   # -*- coding: utf-8 -*-
  #!/usr/bin/python


  """

  This test case check how system works in the situation, when user tries to 
use already
  used username (domain)

  We are creating two accounts with such parameters:
  1. Sex = Femle
  2. Name1=Name2 = foobar%S 
  3. Pass1 = Name
  4. Pass2 = Name
  5. Email address1 = Email address2 =  [EMAIL PROTECTED] 


  In the test we use verification point - warning message about incorrect input 
of domain name and the
  sugestion message

  """

  from selenium import selenium
  import unittest, time, re
  import HTMLTestRunner
  import config
  import Creating_account_basic




  class Same_domain_name(unittest.TestCase):
      
      def setUp(self):        
          self.name = "foobar"
          self.email = self.name + "@meta.ua" 
          self.verificationErrors = []
          self.selenium = selenium("localhost", 4444,config.browser, 
config.link)
          self.selenium.start()

      def test_create_account_to_check(self):  
          """Creating sample account for next test"""
          sel = self.selenium
          sel.open("/")
          sel.click(u"link=Регистрация")
          sel.wait_for_page_to_load("70000")
          sel.click("id_gender_1")
          sel.type("id_first_name", self.name)
          sel.type("id_last_name", self.name)
          sel.type("id_email", self.email)
          sel.type("id_username",  self.name)
          
#sel.wait_for_condition(sel.is_element_present("check_username_block"), 70000)
          time.sleep(10)
          print "!!!", sel.is_element_present("check_username_block")
          sel.type("id_password",  self.name)
          print sel.get_text("check_username_block").decode('cp-1252')
          sel.type("id_password2", self.name)
          sel.click(u"//[EMAIL PROTECTED]'Зарегистрироваться']")
          sel.wait_for_page_to_load("70000")
          if config.debugMode is True:
              time.sleep(5)


      def tearDown(self):
          self.selenium.stop()
          print self.verificationErrors
          self.assertEqual([], self.verificationErrors)

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




  On Thu, Jul 17, 2008 at 6:47 AM, Oleg Oltar <[EMAIL PROTECTED]> wrote:

    In [1]: import sys

    In [2]: sys.getdefaultencoding()
    Out[2]: 'ascii'

    In [3]: sys.stdout.encoding
    Out[3]: 'US-ASCII'



    On Thu, Jul 17, 2008 at 6:29 AM, Oleg Oltar <[EMAIL PROTECTED]> wrote:

      Seems need help there. Start getting


      Traceback (most recent call last):

        File "./newaccount/Same_domain_name.py", line 56, in 
test_create_account_to_check
          print sel.get_text("check_username_block")
      UnicodeEncodeError: 'ascii' codec can't encode characters in position 
0-4: ordinal not in range(128)


      when trying to get the text of one of the elements. 

      How to solve it?



      On Thu, Jul 17, 2008 at 5:11 AM, Oleg Oltar <[EMAIL PROTECTED]> wrote:

        OK,

        I just run the program from terminal. OS: OS X, IDLE = Emacs:).

        Yep used the string "# -*- coding: utf-8 -*-" to setup encoding....



        On Thu, Jul 17, 2008 at 4:14 AM, Kent Johnson <[EMAIL PROTECTED]> wrote:

          Another possibility - do you have a coding declaration in your source
          file, something like
          # -*- coding: <encoding name> -*-

          If so, does the coding declaration match the actual encoding of the 
file?

          Kent


          On Wed, Jul 16, 2008 at 5:11 PM, Kent Johnson <[EMAIL PROTECTED]> 
wrote:
          > On Wed, Jul 16, 2008 at 2:40 PM, Oleg Oltar <[EMAIL PROTECTED]> 
wrote:
          >> Hi I am using unittest framework with selenium.
          >>
          >> When I tried this code (my verification point)
          >>
          >>         self.assertEqual(True, sel.is_text_present(u"Извените 
пароли не
          >> совпадают"), "System didn't give a correct warning about the 
password
          >> misstype")
          >>
          >>> Where u"Извените пароли не совпадают" is russian = "Sorry 
passwords aren't
          >>> equal", and sel.is_text_present - searches text string on the page
          >>
          >> The output I get in case of failure was:
          >>
          >>
          >> Traceback (most recent call last):
          >>
          >>   File "./newaccount/Password_matching.py", line 50, in
          >> test_passwordMatching
          >>     self.assertEqual(True, sel.is_text_present(u"Извените
          >> пароли не Ñ Ð¾Ð²Ð¿Ð°Ð´Ð°ÑŽÑ‚"), "System didn't give a 
correct
          >> warning about the password misstype")
          >>
          >> AssertionError: System didn't give a correct warning about the 
password
          >> misstype
          >>
          >> Is there any way to get normal russian text instead of these 
strange D chars
          >> "Изве...."
          >
          > I don't have the solution but maybe I can give you a useful clue. 
The
          > D characters are most likely the utf-8 encoding of the Russian text,
          > when displayed as if it is latin-1. So something in the system is
          > converting the text to utf-8 and your console probably has latin-1 
or
          > cp1252 encoding.
          >
          > Some details might help - how are you running the program - console,
          > IDLE...? What OS? What are the values of sys.getdefaultencoding() 
and
          > sys.stdout.encoding?
          >
          > Kent
          >











------------------------------------------------------------------------------


  _______________________________________________
  Tutor maillist  -  Tutor@python.org
  http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to