Работая в нескольких компаниях с 1 000 + рабочие, я нашел, что в общем и целом, они все используют По необходимости.
я спросил, "Почему Вы не используете что-то еще? SVN? Мерзавец? Подвижный? Darcs?" - и они сказали, что (это - то же для всех компаний) - когда они приняли решение пойти с По необходимости, это было или что, или SourceSafe или CVS - и честно, учитывая те три варианта, я пойду с По необходимости, также.
'более трудным' системам управления версиями трудно нарастить обороты с таким количеством людей, и много преимуществ DCVS менее выгодно, когда у Вас есть объем Ваших команд программного обеспечения, работающих в 18 футах друг из друга.
По необходимости имеет много рычагов API для разработчиков для использования, и для централизованной системы, она имеет много наглости.
я не говорю, что это - лучшее решение - но я, по крайней мере, видел некоторые очень крупные компании, где По необходимости работает, и достаточно хорошо что это почти повсеместно.
I got solution for this, use selenium.focus method and the selenium.keyPressNative/keyReleaseNative methods.
You will need to give focus to the text box using:
selenium.focus("text box locator");
Then if your input file is C:\tools\File.txt you need to type the letters like so:
selenium.keyDownNative("16"); //SHIFT ON
selenium.keyPressNative("67"); // c shift makes it C
selenium.keyPressNative("59"); // ; Shift makes it : (you can't do colon directly)
selenium.keyUpNative("16"); // SHIFT OFF
selenium.keyPressNative("47"); // slash
selenium.keyPressNative("84"); // t
selenium.keyPressNative("79"); // o
selenium.keyPressNative("79"); // o
selenium.keyPressNative("76"); // l
selenium.keyPressNative("83"); // s
selenium.keyPressNative("47"); // slash
selenium.keyDownNative("16"); //SHIFT ON
selenium.keyPressNative("70"); // f shift makes it F
selenium.keyUpNative("16"); // SHIFT OFF
selenium.keyPressNative("73"); // i
selenium.keyPressNative("76"); // l
selenium.keyPressNative("69"); // e
selenium.keyPressNative("46"); // .
selenium.keyPressNative("84"); // t
selenium.keyPressNative("88"); // x
selenium.keyPressNative("84"); // t
selenium.keyPressNative("10"); // Enter
selenium.keyReleaseNative("10"); // Enter
I've ended the sequqnce with an 'Enter' character. Sometimes this doesn't work so you may need to click the button (if you know the element locator for it).
«fileLocator» - это не URL-адрес, а локатор, как указано вверху в документации javadoc класса Selenium. Это указатель ввода, используемый для выбора файла.
«fieldLocator» - это URL-адрес, указывающий на файл, который вы хотите установить в поле ввода формы, как указано в цитируемом документе.
В Firefox в режиме Chrome (browserId = * chrome вместо * firefox), это работает должным образом. Документировано, что он работает только с этим идентификатором браузера)
Например: attachFile ("uploadField", Thread.currentThread (). GetContextClassLoader (). GetResource ("files / sample.pdf"). ToString ());
Намного проще использовать $ sel-> type и $ sel-> focus. Ниже хорошая статья.
Это старый вопрос, но я недавно решил проблему, сделав вот что
//Start an auto it script that selects the file manually
if(browser.contains("iexplore")){
Runtime r= Runtime.getRuntime();
Process p = null;
try {
p = r.exec("C:\\uploadFile.exe \"Files\" \"ctl00$ContentPlaceHolder1$FilesView$ctl02$NewFile\" \"C:\\GhostTagBug2.ttx\"");
}catch(Exception e){}
p.waitFor();
} else {
//Tested on firefox
//Get focus and type the path manually
selenium.focus("xpath=//input[contains(@id,\"_NewFile\")]");
selenium.type("xpath=//input[contains(@id,\"_NewFile\")]", "C:\\GhostTagBug2.ttx");
}
browser - это просто переменная, содержащая информацию о том, в каком браузере запущен Selenium скрипт, а код, очевидно, на java.
Для IE uploadFile.exe - это автоматический скрипт, который выглядит следующим образом.
#include IE.au3
AutoItSetOption("WinTitleMatchMode","2") ; set the select mode to select using substring
;Normally run from command line
if($cmdLine[0] > 2) then
$titlex = $cmdLine[1] ;Title of the window
$form = $cmdLine[2] ;Name of the file upload/save form object
$file = $cmdLine[3] ;Path of the file to upload
Else
;Testing fields
$titlex = "Files"
$form = "ctl00$ContentPlaceHolder1$FilesView$ctl02$NewFile"
$file = "C:\\GhostTagBug2.ttx"
EndIf
WinWait($titlex) ; match the window with substring
$title = WinGetTitle($titlex) ; retrives whole window title
WinSetState($title, "", @SW_MAXIMIZE) ;Maximize the window incase button is hidden
WinActivate($title)
WinWaitActive($title)
$oIE = _IEAttach ("Files")
$oT = _IEGetObjByName ($oIE, $form)
;Move the mouse to the button on the form and click it
MouseMove (_IEPropertyGet ($oT, "screenx") + _IEPropertyGet ($oT, "width") - 10, _IEPropertyGet ($oT, "screeny") + _IEPropertyGet ($oT, "height") / 2)
MouseClick ("left")
;Wait for upload screen then input the file and close it
WinWait ("Choose File to Upload")
$hChoose = WinGetHandle ("Choose File to Upload")
ControlSetText ($hChoose, "", "Edit1", $file)
ControlClick ($hChoose, "", "Button2")
;Restore window state
WinSetState($title, "", @SW_RESTORE)
По сути, он захватывает заголовок окна, увеличивает его, вводит файл для загрузки, нажимает кнопку выбора и возвращается в Selenium. Я тестировал его в IE 8, но я не вижу причин, по которым любой IE, поддерживаемый библиотекой auto it's _IE, не смог бы справиться с этим.
Я видел много скриптов для роботов и хаков для firefox, где вы включаете javascript, чтобы делать дополнительные вещи. Оба этих способа не требуют модификации браузера.
Прошу прощения за отсутствие комментариев, этот код все еще в процессе.