Перейти к содержимому

Фотография

выбор значения из ячейки Excel-таблицы c помощью Selenium+Python


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18

#1 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 09:20

И снова здравствуйте!

Господа и дамы, подскажите пожалуйста, как с помощью селениума и пайтона выбрать значение из эксель таблицы?

Есть конфиг-файл в виде xslx документа, там большая таблица с кучей параметров, один из параметров нужно выбрать и вставить в worksheet на веб-сайте. Если я задаю жестко колонку и ячейку, к примеру Н12, то выбор конечно же происходит, но если добавить в таблицу новые строки, то происходит смещение всего и сразу же ошибка.

 

Может кто-нибудь знает как это реализовать, буду очень признателен! нагуглить ничего не вышло путного


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 17 июня 2016 - 09:54

Покажи код, что ты делаешь


  • 0

#3 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 10:26

http://pastebin.com/eqAYiL49

 

метод designTabs это как раз и есть то что я пытаюсь сделать.

просто есть некий скрипт огромный, я в нем и пытаюсь вставить свой код.

суть в том, что создается некий PIXlsDialog - веб таблица типа, в ней нужно найти нужный параметр из конфиг файла и вписать туда необходимое значение из того же файла. а после перейти по другой ссылке и проверить изменившееся поле.

в самом же конфиг файле идет сравнение результатов и ставится пасс\фэйл в зависимости от результатов сравнения


  • 0

#4 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 июня 2016 - 10:29

гуглите openpyxl для XLSX или xlrd для XLS, ну и далее уже оперируете с таблицами мимо селениума
  • 0

#5 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 10:42

гуглите openpyxl для XLSX или xlrd для XLS, ну и далее уже оперируете с таблицами мимо селениума

я гуглил, пока что нашел только жесткое задание ячейки, пример А1 или А2. Но это я и без гугла знаю, так нельзя прописать в коде, т.к. при любом смещении строк в файле, скрипт зафэйлится


  • 0

#6 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 11:00

Я скриптописанию только учусь, на работе приходится разбираться в чужой писанине, дабы не изобретать велосипед, пытаюсь проапдейтить скрипт под свои нужды. Но спросить некого, пайтон и Селениум никто не знает.


  • 0

#7 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 июня 2016 - 11:24

Ну заголовки-то у вас там есть какие-то? Ищите по заголовку столбца/строки или другой "привязке".
  • 0

#8 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 11:34

есть заголовки столбцов, например 1-й столбец Параметр и 2-й - Значение. как искать по заголовкам нужный мне параметр и вытянуть значение? в программировании плох я, 2 недели лишь варюсь в этой каше, селениум+питон(


  • 0

#9 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 11:37

гугл мне выдает все по xlrd, там вроде бы ясно как сделать. А мне нужен xlsx формат


  • 0

#10 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 июня 2016 - 11:42

гугл мне выдает все по xlrd, там вроде бы ясно как сделать. А мне нужен xlsx формат

Через xlrd тоже можно, мне просто openpyxl кажется более удобным (но это на вкус и цвет)
Доки - https://openpyxl.rea....io/en/default/
  • 0

#11 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 11:57

 

гугл мне выдает все по xlrd, там вроде бы ясно как сделать. А мне нужен xlsx формат

Через xlrd тоже можно, мне просто openpyxl кажется более удобным (но это на вкус и цвет)
Доки - https://openpyxl.rea....io/en/default/

 

спасибо, но я видел этот ресурс. Там описана выборка по самой ячейке. Я все равно не понимаю, как сделать выборку по названию параметра в столбце


  • 0

#12 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 июня 2016 - 12:06

Ну, ищете ячейку с нужным текстом, узнаете ее номер столбца или номер строки - собственно, это ведь вам и надо?
  • 0

#13 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 12:20

Ну смотрите, если я пишу так input_param.send_keys(report.cell('D69').value), то все заполняется как нужно. Но стоит мне вставить пустые строки в файл, то все фэйлится, т.к. значения уже нет в D69.


  • 0

#14 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 17 июня 2016 - 12:27

Ох.. ну логично, да :)
вместо захардкоженного адреса ячейки вам нужно динамически вычислять, где это значение, а для этого вам нужна какая-то привязка, что я вам и пытаюсь объяснить.
  • 0

#15 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 июня 2016 - 13:19

все верно. Осталось понять как сделать такую привязку?

у меня тут есть метод
def dialog_init(self, param):
"""
Main initialization of every dialog

:param param:
:return: tuple, changed_value -- should be set up to changed_param;
changed_param -- field, that should be changed ([0] -- component, [1] -- field);
refer_value -- expected result of check_param;
check_param -- parameter for compliance test.
"""
changed_value = param[1].get('changed value')
refer_value = param[1].get('reference value')


# Open Dialog
click(driver, design_dialog_locator(param[0][0], param[0][1]))

# Parsing block and parameter to change
changed_param = param[1].get('parameter to change').split(': ')
check_param = param[1].get('parameter to check').split(': ')

return changed_value, refer_value, changed_param, check_param

в кортеже указаны как раз названия столбцов.

я внутрь этого метода пытаюсь засунуть строки своего кода, но при запуске теста, они как будто не видны, не выполняются вообще.

 


  • 0

#16 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 20 июня 2016 - 06:28

Excel позволяет переименовывать поля.

К примеру, вместо условного D69 можно полю можно присвоить имя "someValue".

Даже если вставить новые строчки - переменная привязанная к полю останется привязана именно к той ячейке, в которой хранится нужное вам значение.

Может быть это можно использовать?


  • 0

#17 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 20 июня 2016 - 10:23

мне нужно написать цикл, который бы пробегал по всему документу, искал мне параметр VO и брал его значение из соседнего столбца. как это сделать, я пока не додумал....


  • 0

#18 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 20 июня 2016 - 12:26

Может кто-нибудь знает как это написать правильно? Всю голову изломал уже, хоть убейте не понимаю как правильно написать такой цикл...


  • 0

#19 DmitriyQA

DmitriyQA

    Постоянный участник

  • Members
  • PipPipPip
  • 183 сообщений
  • ФИО:Коваленко Дмитрий Владимирович
  • Город:Tel Aviv

Отправлено 21 июня 2016 - 07:23

Данное задание не относится к селениуму. Это чисто программеркская задача.

Для начала нужно разобраться в терминах кторыми вы оперируете. Селениум это фреймворк заточенный под тестирование web сервисов. С его помощью в никак не сможете работать с екселем, разве что открывать онлайн документ и пробовать от туда что то доставать. Экселевские документы представляют собой расширеную форму xml дкуоментов. В вашем пайтоне вам нужно разобраться как отркыть xml файл и считать его в обьект в вашем коде. Я знаю как это попробовать сделать с помощью Java - найти скачать библиотеки дял работы с XML файлами, добавить в проект и написать программу которая будет вычитывать исходные данные перед тестом. Но по пайтону ничем конкретно помочь не могу, копайте в этом направлении.

 

Гугл в помощь, блин! http://stackoverflow...e-xml-in-python


  • 1

Senior QA/ Wix.com / qaacademy.net



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных