kasheylm
(Denis Veselovskiy)
25.Январь.2012 17:29:38
#1
Есть такой элемент
<div class="fileinputs"> <input type="file" tabindex="32" id="ctl00_ctl00_ctl00_body_body_Border_body_AudioFile " name="ctl00$ctl00$ctl00$body$body$Border$body$AudioFile"> <table cellspacing="0" cellpadding="0" border="0"> <tbody><tr><td> <input type="text"></td><td style="width: 1px;"> <div><a><span>Browse...</span></a></div></td></tr></tbody></table> </div>
как уже пробывал:
selenium.type("ctl00_ctl00_ctl00_body_body_Border_body_AudioFile", "c:/...")
sel.findElement(By.id()).sendKeys("c:/...")
selenium.attachfile("", "http://kasheylm.ho.ua/имя_файла_залитого_на_мой_сайт" ) еще с помошью библиотеки Robot - но после нажантия кнопки Обзор - открывается виндовое диалоговое окно выбора файла и на этом зависает не передав управление функции класса Robot
и еще, проверял в дебаге, selenium.isVisible("ctl00_ctl00_ctl00_body_body_Border_body_AudioFile") = false
в сss нарыл следующее
class="fileinputs" .opacity = 0
.visible= hidden .z-index= -1 пробовал яваскриптом менять все эти три параметра на
.opacity = 1
.visible= visible .z-index= 11
и элемент стал selenium.isVisible("ctl00_ctl00_ctl00_body_body_Border_body_AudioFile") = true но все равно нифига у меня не вышло ((((( есть у кого какие идеи??
Пример файла если надо больше на http://kasheylm.ho.ua/Describe.aspx.htm но тут стили не сохранилися (
polusok
(Mykhailo Poliarush)
25.Январь.2012 21:59:35
#2
у меня нормально сработал вот такой вот код
{syntaxhighlighter brush: python;fontsize: 100; first-line: 1; }from selenium import webdriver
ff = webdriver.Firefox()
ff.get(“http://kasheylm.ho.ua/Describe.aspx.htm ”)
e = ff.find_element_by_id(“ctl00_ctl00_ctl00_body_body_Border_body_AudioFile”)
e.send_keys(“c:\transformation.xslt”){/syntaxhighlighter}
а что конкртерно у тебя не работает?
dzhariy
(Дмитрий Жарий)
25.Январь.2012 23:12:00
#3
kasheylm
(Denis Veselovskiy)
26.Январь.2012 07:16:27
#4
1. AutoIt - тоже п исал помощника но на Robot, проблема в том что зависает на клике еще до того как помошник начинает писать
2.а что конкртерно у тебя не работает? ругается что невозможно работать с невидимым элементом
kasheylm
(Denis Veselovskiy)
26.Январь.2012 07:31:05
#5
вот как оно выглядит со стилямиhttp://kasheylm.ho.ua/11.gif а так если изменить CSS и расхайдить http://kasheylm.ho.ua/22.gif
polusok
(Mykhailo Poliarush)
26.Январь.2012 08:08:03
#6
надо еще посмотреть, что происходит при нажатии на верхный слой. походу вызывается какой-то javascript, может быть вызвать потом этот ивент через javascript
dzhariy
(Дмитрий Жарий)
26.Январь.2012 09:54:11
#7
А что если кликнуть на <span>Browse...</span> а не на кнопке Обзор?
И потом Robot'ом прохендлать окно?
Там же ведь так и задумано, что юзверь кликает на Browse..., потом запускается внутренний скрипт, который эмулирует нажатие на кнопке Обзор,
и вуаля -- юзер видит файловый диалог.
kasheylm
(Denis Veselovskiy)
26.Январь.2012 13:25:08
#8
>>А что если кликнуть на <span>Browse...</span> а не на кнопке Обзор?
так на нее и нажимаю
поступило предложение что Robot в друго трэде должен быть, ща буду пробывать
kasheylm
(Denis Veselovskiy)
26.Январь.2012 14:01:09
#9
таки да, надо было в отдельном потоке запускать Robota )
polusok
(Mykhailo Poliarush)
26.Январь.2012 14:12:30
#10
так что решил свою проблему?
kasheylm
(Denis Veselovskiy)
26.Январь.2012 15:18:16
#11
да, решил
с помошью класа Robot, но там одна особенность, он должен запускаться в отдельном потоке, и запускаться до клика на кнопку Browse
polusok
(Mykhailo Poliarush)
27.Январь.2012 07:38:47
#12
вставь сюда кусок кода пожайлуста, чтобы люди потом могли посмотреть как ты решил задачу. спасибо.
kasheylm
(Denis Veselovskiy)
27.Январь.2012 08:48:00
#13
та я на радостях что то и забыл про код совсем )))))
{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }public void fillUploadAudioFile(File filepath) {
Thread upload = new Thread() {
@Override
public void run() {
ExtendedWebDriver.uploadFile(filepath);
}
};
upload.start();
// это моя кнопочко :)
sel.click(By.xpath("//*[@id='ctl00_ctl00_ctl00_body_body_Border_body_AudioFile']/following-sibling::*//span"));
sel.sleep(5000);
try {
upload.join();
} catch (InterruptedException ie) {ie.printStackTrace();}
}{/syntaxhighlighter}</p><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">public void fillUploadAudioFile() {</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> </div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> //upload script</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> Thread upload = new Thread() {</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> @Override</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> public void run() {</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> ExtendedWebDriver.uploadFile(new File("C:\\tests\\Tesco_Trade_Meat_Wine_PANTS939015.wav"));</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> }</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> };</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> upload.start();</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> sel.click(By.xpath("//*[@id='ctl00_ctl00_ctl00_body_body_Border_body_AudioFile']/following-sibling::*//span"));</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> sel.sleep(5000);</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> try {</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> upload.join();</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> } catch (InterruptedException ie) {ie.printStackTrace();}</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"> </div><p>ну и собственно ввод пути и нажатие Ентер</p><p>юзается Явовский класс java.awt.Robot</p><p>{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }public static void uploadFile(File file_path) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Robot robot = new Robot();
for (char c : file_path.getAbsolutePath().toCharArray()) {
robot.delay(50);
if (c == ':') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
} else if (c == '/') {
robot.keyPress(KeyEvent.VK_BACK_SLASH);
} else if (c == '_') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_SHIFT);
} else {
robot.keyPress(KeyStroke.getKeyStroke(Character.toUpperCase(c), 0).getKeyCode());
robot.keyRelease(KeyStroke.getKeyStroke(Character.toUpperCase(c), 0).getKeyCode());
}
}
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
{/syntaxhighlighter}
P.S.: плохо что на форме форума нету тегов форматирования текста кода, типа как в JIRE к примеру - {code}…{code}
polusok
(Mykhailo Poliarush)
27.Январь.2012 09:07:29
#14
почему нету, есть, предпоследняя кнопка с желтым карандашом
aspirin
(aspirin)
02.Февраль.2012 11:17:42
#15
File file = null; file = new File(valuetoType); control.sendKeys(file.getAbsolutePath());
у меня так работает )