2013-11-14 6 views
0

rSource устанавливается в значение ячейки A1, которое содержит число.Вставка текста в Excel с использованием Selenium

Следующая часть моего кода открывает веб-сайт и вводит rSource в поле 'num', которое является только полем ввода. Затем нажимается кнопка, которая заставляет веб-сайт вычислять квадратный корень из введенного числа перед отображением его в поле «ответ».

Проблема с моим кодом, кажется, эта строка:

variableName = driver.findElementByName("answer").getAttribute("value") 

То, что я хочу, чтобы захватить атрибут «ответа», который будет квадратный корень из числа я вступил раньше, а затем вставьте это в ячейку А2.

Я заметил, что getAttribute, похоже, не то же самое, что «копирование», как при попытке вручную вставить в ячейку я никогда не получаю «ответ». То, что я надеялся сделать, это как-то «скопировать» эту ценность, а затем использовать что-то вроде «Листы» («Sheet1»). Range («A2»). PasteSpecial ', чтобы затем вставить ответ в ячейку A2 ... Хотя после тонна игры вокруг, я не могу заставить ее работать. Любая помощь приветствуется.

Вышеупомянутый код был создан с использованием Selenium, который я затем модифицировал с помощью VBA.

+0

вы пробовали выделив текст и с помощью 'селена SendKeys' для этого? Подсветка возможна при использовании селена. С другой стороны, если вам действительно нужно, чтобы он поступал из буфера обмена, объект «Clipboard» является хорошей альтернативой. – Manhattan

+0

Я не помню, что я делал раньше, но это было нечто вроде: driver.findElementByName («ответ»). SendKeys (Keys.Control + «C»), который не работал для меня – JimmyK

+0

Пожалуйста, смотрите мой ответьте ниже. Это не совсем стиль Селена, но он может помочь. – Manhattan

ответ

1

Как я сказал в комментариях, Selenium может использовать SendKeys для этого. Однако, если вам действительно нужно действие copy-paste, я предлагаю вместо этого использовать Clipboard.

Обратите внимание: для этого вам необходимо указать Microsoft Forms 2.0 Object Library. Если это не отображается, добавьте UserForm в ваш файл, и он будет отображаться по умолчанию.

Следующая подпрограмма поместит строку текста в ваш буфер обмена. Выполнение Ctrl-V после запуска будет эмулировать действие вставки.

Sub Boom() 
Dim DataObj As MSForms.DataObject 
Set DataObj = New MSForms.DataObject 
With DataObj 
    .SetText "Answer" 
    .PutInClipboard 
End With 
End Sub 

Просто замените «Ответ» на любое значение, которое вы хотите. А еще лучше, изменить выше, чтобы иметь возможность принимать текстовые строки, как показано ниже:

Sub Boom(Str As String) 
Dim DataObj As MSForms.DataObject 
Set DataObj = New MSForms.DataObject 
With DataObj 
    .SetText Str 
    .PutInClipboard 
End With 
End Sub 

Теперь вы можете сделать Boom("Answer") на него, и он будет ставить «Ответить» в буфер обмена. Затем вы можете вставить его, используя Range("A1").PasteSpecial xlPasteAll или что угодно.

Надеюсь, это поможет вам. Не совсем путь Selenium, но по крайней мере это очень чистый вариант. :)

EDIT: Чтобы использовать SendKeys Selenium, он идет что-то вроде:

Sub CopyTest() 

Dim Sel As New SeleniumWrapper.WebDriver 
Dim keys As New SeleniumWrapper.keys 

Sel.SendKeys keys.Control & "c" 

End Sub 

Надежда, что помогает. :)

+0

Спасибо за ответ, не могли бы вы привести пример использования SendKeys для имитации нажатия CTRL + C, например? Каждый раз, когда я его использую, я получаю ошибки, но возможно, что мой синтаксис неверен. О, и просто попробовав свое решение сейчас. – JimmyK

+0

Отметьте мое редактирование выше. Обратите внимание, что я использую '&', где вы использовали '+'. '&' является правильным. – Manhattan

+0

Работал как шарм, спасибо большое! Я не знаю, почему, но SendKeys просто просто ненавидят меня. В конце я использовал ваш метод буфера обмена, который отлично работал. – JimmyK

0

Существует простое исправление. Не используйте copy-paste.заменить .getattribute (value) с .text:

variableName = driver.findElementByName("answer").Text 

FYI, для нескольких элементов я использую .GetData так:

arrayName = driver.findElementsByClassName("answer").GetData 

HTH

Смежные вопросы