Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

upload file error


(Denis Veselovskiy) #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  но тут стили не сохранилися (


Upload file или вечные проблемы с загрузкой файла на сервис
(Mykhailo Poliarush) #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}

а что конкртерно у тебя не работает?


(Дмитрий Жарий) #3

В крайнем случае, можно на AutoIt помошника написать:

Selenium RC: How to Upload and Submit Files Using Selenium and AutoIt


(Denis Veselovskiy) #4

1. AutoIt  - тоже п исал помощника но на Robot, проблема в том что зависает на клике еще до того как помошник начинает писать

2.а что конкртерно у тебя не работает?
ругается что невозможно работать с невидимым элементом


(Denis Veselovskiy) #5

вот как оно выглядит со стилями
http://kasheylm.ho.ua/11.gif

а так если изменить CSS и расхайдить 
http://kasheylm.ho.ua/22.gif


(Mykhailo Poliarush) #6

надо еще посмотреть, что происходит при нажатии на верхный слой.
походу вызывается какой-то javascript, может быть вызвать потом этот ивент через javascript


(Дмитрий Жарий) #7

А что если кликнуть на <span>Browse...</span> а не на кнопке Обзор?

 

И потом Robot'ом прохендлать окно?

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

и вуаля -- юзер видит файловый диалог.

 


(Denis Veselovskiy) #8

>>А что если кликнуть на <span>Browse...</span> а не на кнопке Обзор?

так на нее и нажимаю

поступило предложение что Robot в друго трэде должен быть, ща буду пробывать


(Denis Veselovskiy) #9

таки да, надо было в отдельном потоке запускать Robota )


(Mykhailo Poliarush) #10

так что решил свою проблему?


(Denis Veselovskiy) #11

да, решил

с помошью класа Robot, но там одна особенность, он должен запускаться в отдельном потоке, и запускаться до клика на кнопку Browse



(Mykhailo Poliarush) #12

вставь сюда кусок кода пожайлуста, чтобы люди потом могли посмотреть как ты решил задачу. спасибо.


(Denis Veselovskiy) #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;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; //upload script</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; 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;">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; public void run() {</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; };</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; upload.start();</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; 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;">&nbsp; &nbsp; &nbsp; &nbsp; sel.sleep(5000);</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; try {</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; upload.join();</div><div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">&nbsp; &nbsp; &nbsp; &nbsp; } 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;">&nbsp; &nbsp;&nbsp;</div><p>ну и собственно ввод пути и нажатие Ентер</p><p>юзается Явовский класс&nbsp;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}


(Mykhailo Poliarush) #14

почему нету, есть, предпоследняя кнопка с желтым карандашом


(aspirin) #15

File file = null;
file = new File(valuetoType);
control.sendKeys(file.getAbsolutePath());

у меня так работает )