Как selenium webdriver загружает файлы в браузер?
Я разработчик javascript/java, и я пытался выяснить, как система автоматизации selenium webdriver загружает файлы из файловой системы. Невозможно установить входной файл через javascript, потому что это нарушение безопасности. Однако как-то webdriver может сделать это с помощью следующей команды:
driver.setFileDetector(new LocalFileDetector());
WebElement upload = driver.findElement(By.id("myfile"));
upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg");
driver.findElement(By.id("submit")).click();
Значит, они устанавливают значение, отправляя ему ключи? Я не понимаю. Я просмотрел исходный код, найденный здесь:
http://code.google.com/p/selenium/source/checkout
Я все еще не могу найти, где они это делают.
Изменить: Мой вопрос заключается не в том, как это сделать с селеном, но как это сделали разработчики селена? Как они обошли ограничения безопасности в javascript? Как они загружают файл?
Ответы
Ответ 1
Хороший собеседник... они написали прокси-сервер HTTP для разрешения ограничений на Javascript secuirty. Используя этот прокси-сервер, вы можете перекрыть многие ограничения политики "того же самого хоста", где браузер не позволит Javascript совершать звонки на что-либо, кроме сервера, с которого была отправлена текущая страница.
Кроме того, WebDriver использует альтернативный подход для запуска событий на уровне ОС. Поскольку эти "нативные события" не генерируются браузером, этот подход обходит ограничения безопасности, помещенные в синтезированные события, и, поскольку они являются специфичными для ОС, как только они работают для одного браузера на конкретной платформе, повторное использование кода в другом браузере относительно легко.
В большинстве приведенных выше ссылок ссылка приведена ниже.. прочитайте следующую ссылку для более подробной информации о внутренних функциях Selenium
http://www.aosabook.org/en/selenium.html
Ответ 2
Функциями HTML файлов загрузки выдается:
<input id="fileField" type="file" onchange="document.getElementById('textfield').value=this.value" name="position">
<input type="submit" value="导入">
Вы можете использовать следующие коды для завершения загрузки файла Windows. Он работает успешно, и коды не включают щелчок по действию загрузки.
driver.FileDetector = new LocalFileDetector();
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click();
Ответ 3
У меня есть Загруженная фотография на Facebook с помощью Selenium Webdriver и AutoIt
Шаги, как показано ниже
Шаг 1
В коде eclipse Upto (Загрузить фотографию):
WebElement Upload = Firefox.findElement(By.cssSelector("input[id^='u_']"));
Upload.click();
Шаг 2
Загружено и установлено AutoIt: http://www.autoitscript.com/site/autoit/downloads/ (Скачать ZIP)
Шаг 3
Запишите код, указанный ниже в блокноте, и сохраните его как PhotoUpload.au3
WinWaitActive("File Upload")
Send("D:\Photo0116.jpg")
Send("{ENTER}")
Шаг 4: щелкните правой кнопкой мыши на этом файле .au3 и скомпилируйте его.
Шаг 5: добавьте код в script файл, как показано ниже:
try {
String[] commands = new String[]{};
// Location of the autoit executable
commands = new String[] {"D:\\My softwares\\install software\\selenium\\UploadPhoto3.exe"};
Runtime.getRuntime().exec(commands);
}
catch (IOException e) {}
Шаг 6: выполните script (PhotoUpload.java
)
Шаг 7. Фото загрузится успешно.
Ответ 4
//assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");
или
driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");
Попробуйте это и дайте мне знать
Ответ 5
В некоторых случаях специально с Java вам нужно создать объект File и передать absolutePath() в драйвер, как показано ниже:
File file = new File(sampleFile);
driver.findElement(By.id("<Your input tag with type of File>")).sendKeys(file.getAbsolutePath());
Пример файла - это строка, указывающая на файл, который необходимо загрузить.
Это работает для меня в Firefox и Chrome.
Ответ 6
Это помогло мне выполнить загрузку файлов,
Код:
public class FileUpload {
@Test
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"));
/*
* driver.switchTo().activeElement()
* .sendKeys("selenium_2_testing_tools.pdf"); ;
*/
{
driver.wait(30000);
} catch (Exception er) {
System.out.println(er);
}
}
}