Вопрос по java, selenium, file-upload, selenium-webdriver, webdriver – Как обработать загрузку файлов Windows с помощью Selenium WebDriver?

34

Я видел много вопросов и решений по загрузке файлов с использованием Selenium WebDriver в Stackoverflow. Но никто из работающих по следующему сценарию.

Кто-то дал решение следующим образом

// assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");

Но все же я не могу найти дескриптор окна, как я могу работать над этим ??

Screenshot

Я ищу решение по вышеуказанному сценарию

Пожалуйста, проверьте это для любого из следующих веб-сайтов

http://www.uploadify.com/demos/
http://www.zamzar.com/
Мы можем отправлять ключи, так как мы отправляем их на веб-сайт & quot; uploadfile & quot ;. Заметки нетclick действие, выполненное для отображения всплывающего окна. Вы бы знали, пытались ли вы. :) Amey
Я просто спрашиваю, ты дал этому подходу шанс? Amey
Это предположение для обработки winwods & apos; неожиданно возникнуть Jasmine.Olivra
Так ты попробовал то, что написал? Если вы сделали то, что написали, и в чем была ошибка? Amey
Вы нашли идентификатор элемента и отправили ключи (& quot; путь / к / файлу?) Этому веб-элементу? Amey

Ваш Ответ

15   ответов
1

// wait for the window to appear
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.alertIsPresent());

// switch to the file upload window
Alert alert = driver.switchTo().alert();

// enter the filename
alert.sendKeys(fileName);

// hit enter
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);

// switch back
driver.switchTo().activeElement();
Что это за «робот»?
9

public void test() {
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.freepdfconvert.com/pdf-word");
    driver.findElement(By.id("clientUpload")).click();
    driver.switchTo()
            .activeElement()
            .sendKeys(
                    "/home/likewise-open/GLOBAL/123/Documents/filename.txt");
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    driver.findElement(By.id("convertButton"));
Это должно быть ответом. sendKeys () просто не дает никакого результата, но этот работает отлично. Я использую GhostDriver в Ubuntu.
1

ызовите два следующих LOC, нажав кнопку «Загрузить» в пользовательском интерфейсе.

        // Send the file path and enter file path and wait.
        System.Windows.Forms.SendKeys.SendWait("complete path of the file");
        System.Windows.Forms.SendKeys.SendWait("{ENTER}");
0

driver. Это работает нормально для вышеуказанного сценария.

Runtime.getRuntime().exec("E:\\AutoIT\\FileUpload.exe");

Пожалуйста, используйте ссылку ниже для получения дополнительной помощи: http://www.guru99.com/use-autoit-selenium.html

0

затем

public YourPage uploadFileBtnSendKeys() {
    final ClassLoader classLoader = getClass().getClassLoader();
    final File file = new File(classLoader.getResource("yourFile.whatever").getPath());
    uploadFileBtn.sendKeys(file.getPath());
    return this;
}

Уолла, вы увидите выбранный вами файл и пропустили окно проводника

0

file & quot;) и отправьте путь к файлу.

WebElement fileInput = driver.findElement(By.id("uploadFile"));
fileInput.sendKeys("/path/to/file.jpg");

ПРИМЕЧАНИЕ. Если вы используете RemoteWebDriver, вам также потребуется установить детектор файлов. По умолчаниюUselessFileDetector

WebElement fileInput = driver.findElement(By.id("uploadFile"));
driver.setFileDetector(new LocalFileDetector());
fileInput.sendKeys("/path/to/file.jpg");
1

используя файл vbsscript. Ниже приведен код в файле VBS,

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "C:\Demo.txt"
WshShell.SendKeys "{ENTER}"

Ниже приведена строка кода селен для запуска этого файла VBS,

driver.findElement(By.id("uploadname1")).click();
Thread.sleep(1000);
Runtime.getRuntime().exec( "wscript C:/script.vbs" );
0

я этой цели Пример: - D: \\ images \\ Lighthouse.jpg

меры  - используйте sendkeys для кнопки, имеющей опцию просмотра (кнопка, которая откроется    ваше окно для выбора файлов)  - Теперь нажмите на кнопку, которая собирается загрузить ваш файл

driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:\\images\\Lighthouse.jpg");  
Thread.sleep(5000);
driver.findElement(By.xpath("//button[@id='Upload']")).click();
0
        webDriver.FindElement(By.CssSelector("--cssSelector--")).Click();
        webDriver.SwitchTo().ActiveElement().SendKeys(fileName);

предложенного в ответе Мэттом в C # .net, также может работать с именем класса # 32770 для поля загрузки.

0

крыть файл». УвидетьAutoIt.

Кроме того, если вы не можете & quot; нажать & quot; элемент, мой обходной путь, как правило, сделать это:

element.SendKeys(Keys.Enter);

Надеюсь, это поможет (хотя это старый пост)

2

C# and Selenium этот код здесь работает для меня,NOTE Вы захотите использовать параметр для замены & quot; localhost & quot; в вызове FindWindow для вашего конкретного сервера, если это не localhost, а отслеживание, которое является самым новым диалоговым окном, открытым, если имеется более одного диалогового окна, но это должно помочь вам начать:

    [DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32.dll", EntryPoint = "FindWindow")]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    public static void UploadFile(this IWebDriver webDriver, string fileName)
    {
        webDriver.FindElement(By.Id("SWFUpload_0")).Click();
        var dialogHWnd = FindWindow(null, "Select file(s) to upload by localhost");
        var setFocus = SetForegroundWindow(dialogHWnd);
        if (setFocus)
        {
            Thread.Sleep(500);
            SendKeys.SendWait(fileName);
            SendKeys.SendWait("{ENTER}");
        }
    }
1

чем то, что описал Slanec. Решение Hes работает, когда вы используете английскую клавиатуру, в противном случае вам будет трудно попытаться "отобразить" карту ключ для специальных символов.

Вместоrobot.keyPress а такжеrobot.keyRelease каждый ключ, который вы можете использоватьToolkit скопировать строку в буфер обмена, а затем вставить ее.

    StringSelection s = new StringSelection("Path to the file");
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(s, null);
    Robot robot = new Robot();
    robot.keyPress(java.awt.event.KeyEvent.VK_ENTER);
    robot.keyRelease(java.awt.event.KeyEvent.VK_ENTER);
    robot.keyPress(java.awt.event.KeyEvent.VK_CONTROL);
    robot.keyPress(java.awt.event.KeyEvent.VK_V);
    robot.keyRelease(java.awt.event.KeyEvent.VK_CONTROL);
    Thread.sleep(3000);
    robot.keyPress(java.awt.event.KeyEvent.VK_ENTER);
38
// assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");

В случаеZamzar веб, он должен работать отлично. Выdon't click элемент. Вы просто вводите путь в него. Чтобы быть конкретным, это должно быть абсолютно нормально:

driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");

В случае сUploadify Вы находитесь в сети, так как загруженной вещи нетinput, но объект Flash. Нет API для WebDriver, который позволял бы вам работать с диалогами браузера (или объектами Flash).

Поэтому после того, как вы щелкнете по элементу Flash, появится окно, которое вы не сможете контролировать. В браузерах и операционных системах, которые я знаю, вы можете в значительной степени предположить, что после открытия окна курсор находится вFile name вход. Пожалуйста, убедитесь, что это предположение верно и в вашем случае.

Если нет, вы можете попытаться перейти к нему, нажавAlt + Nпо крайней мере на винде ...

Если да, вы можете «вслепую» введите путь в него, используяRobot учебный класс. В вашем случае это будет что-то вроде:

driver.findElement(By.id("SWFUpload_0")).click();
Robot r = new Robot();
r.keyPress(KeyEvent.VK_C);        // C
r.keyRelease(KeyEvent.VK_C);
r.keyPress(KeyEvent.VK_COLON);    // : (colon)
r.keyRelease(KeyEvent.VK_COLON);
r.keyPress(KeyEvent.VK_SLASH);    // / (slash)
r.keyRelease(KeyEvent.VK_SLASH);
// etc. for the whole file path

r.keyPress(KeyEvent.VK_ENTER);    // confirm by pressing Enter in the end
r.keyRelease(KeyEvent.VK_ENTER);

Это отстой, но это должно работать. Обратите внимание, что вам могут понадобиться эти:Как я могу заставить робота набирать `:`? а такжеПреобразовать строку в ключевые события (плюс есть новый и блестящийKeyEvent#getExtendedKeyCodeForChar() который выполняет аналогичную работу, но доступен только из JDK7).

Для Flash единственная альтернатива, которую я знаю (изэто обсуждение) использовать темную технику:

First, you modify the source code of you the flash application, exposing internal methods using the ActionScript's ExternalInterface API. Once exposed, these methods will be callable by JavaScript in the browser.

Second, now that JavaScript can call internal methods in your flash app, you use WebDriver to make a JavaScript call in the web page, which will then call into your flash app.

This technique is explained further in the docs of the flash-selenium project. (http://code.google.com/p/flash-selenium/), but the idea behind the technique applies just as well to WebDriver.

Что не работает? имею в виду? Почему, где, с каким сообщением об ошибке?
Не работает, нужно найти что-то еще Jasmine.Olivra
Ага. Оба работают на меня.Robot Решение, очевидно, зависит от раскладки клавиатуры, но я думаю, что этого можно как-то избежать.
Не могу ввести путь к файлу в окне загрузки файла Jasmine.Olivra
Я также добавил решение для темной магии. В любом случае, вы все еще недостаточно конкретны. Пожалуйста, отредактируйте свой вопрос с тем, что вы пытались и как или почему не удалось.
-1

webDriver.findElement(By.xpath("//input[@type='file' and @name='importFile']")).sendKeys("C:/path/to/file.jpg");
-1

driver.findElement(browsebutton).sendKeys("C:\\Users\\Desktop\\Training\\Training.jpg");

Похожие вопросы