Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Помогите пожалуйста с кириллической кодировкой (решения искал, не получается почему-то) [RSS Feed]

#1 Март 15, 2015 16:18:30

dmitraz
Зарегистрирован: 2015-03-15
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с кириллической кодировкой (решения искал, не получается почему-то)

Добрый день!

Я начинаю осваивать тесты на питон+селениум.

Прошу помочь опытных программистов с проблемой в коде.

Есть задача протестировать различные варианты поведения пользователя в приложении, но проблема возникает сразу при тесте входа. Т.е. есть код, форма с одним полем “Имя” и кнопкой “Войти”. Этот код берет тестовые имена пользователей из обычного текстового файла. Имена в файле кириллические. Файл с именами и файл с кодом сохранены в utf-8.


Вот код скрипта:

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver import FirefoxProfile
from time import sleep
from random import randint
class Userr(object):
    def __init__(self, name):
        self.name = name
        firefoxProfile = FirefoxProfile()
        firefoxProfile.set_preference('plugin.state.flash', 0)
        firefoxProfile.set_preference('permissions.default.image', 2)
        firefoxProfile.update_preferences()
        self.driver = webdriver.Firefox(firefox_profile=firefoxProfile)
        self.driver.implicitly_wait(10)
        self.go()
    def go(self):
        driver = self.driver
        driver.get('http://testpy.a5.ru/form1.html')
        try:
            input = driver.find_element_by_id('nick')
            input.send_keys(self.name)
            submit = driver.find_element_by_xpath("//*[@type='submit']")
            submit.click()
            print('ok: %s' % self.name)
        except:
            print('bad: %s' % self.name)
            driver.quit()
if __name__ == '__main__':
    names = open('names.txt').read().splitlines()
    for name in names:
        Userr(name)

Файл с именами names.txt выглядит просто:

Олег
Артём
Марина

Проблема в том, что скрипт почему-то не хочет работать с кириллическими именами в файле. Т.е. он их почему не подставляет в поле, ну и до нажатия кнопки не доходит совсем. При использовании латинских имен всё работает корректно.

Python 2.7.2

Вот что выдаёт консоль:

tux@slitaz:~$ python main.py
Traceback (most recent call last):
  File "main.py", line 37, in <module>
    Userr(name)
  File "main.py", line 22, in __init__
    self.go()
  File "main.py", line 28, in go
    input.send_keys(self.name)
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 318, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': typing})
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 402, in _execute
    return self._parent.execute(command, params)
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 173, in execute
    response = self.command_executor.execute(driver_command, params)
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 346, in execute
    data = utils.dump_json(params)
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/utils.py", line 30, in dump_json
    return json.dumps(json_struct)
  File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xef in position 0: unexpected end of data

Прошу помощи! Заранее спасибо!

Отредактировано dmitraz (Март 15, 2015 16:26:17)

Офлайн

#2 Март 16, 2015 02:28:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите пожалуйста с кириллической кодировкой (решения искал, не получается почему-то)

dmitraz
names = open('names.txt').read().splitlines()
Файл нужно открывать с указанием кодировки. Используй io.open().



Офлайн

  • Начало
  • » Центр помощи
  • » Помогите пожалуйста с кириллической кодировкой (решения искал, не получается почему-то)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version