// assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");
Hej, to mój skądś :).
W przypadku Zamzar internecie, to powinno działać idealnie. Ty nie klikaj elementu. Po prostu wpisujesz do niego ścieżkę. Aby być konkretne, powinno to być absolutnie ok:
driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");
W przypadku Uploadify internecie, jesteś w zalewie, ponieważ rzeczą przesyłanie ma input
, ale obiekt Flash. Nie ma interfejsu API dla WebDriver, który umożliwiałby pracę z oknami dialogowymi przeglądarki (lub obiektami Flash).
Po kliknięciu elementu Flash pojawi się okno, nad którym nie będziesz mieć kontroli. W przeglądarkach i systemach operacyjnych, które znam, można założyć, że po otwarciu okna kursor znajduje się na wejściu File name
. Upewnij się, że to założenie jest prawdziwe również w twoim przypadku.
Jeśli nie, można spróbować skoczyć do niego naciskając Alt + N, przynajmniej na Windows ...
Jeśli tak, możesz „na ślepo” wpisać ścieżkę do niego przy użyciu klasy Robot
. W twoim przypadku, to byłoby coś na drodze:
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);
To jest do bani, ale to powinno działać. Zauważ, że możesz potrzebować tych: How can I make Robot type a `:`? i Convert String to KeyEvents (plus jest nowe i błyszczące KeyEvent#getExtendedKeyCodeForChar()
, które wykonuje podobną pracę, ale jest dostępne tylko z JDK7).
pamięć flash, jedyna alternatywa wiem (od this discussion) jest skorzystanie z ciemną technika:
Po pierwsze, należy zmodyfikować kod źródłowy ciebie aplikacji Flash, odsłaniając metody wewnętrznych za pomocą interfejs API ExternalInterface ActionScript. Po ujawnieniu te metody będą wywoływalne przez JavaScript w przeglądarce.
Po drugie, teraz, gdy JavaScript może wywoływać wewnętrzne metody w twojej aplikacji flashowej, używasz WebDriver do wywołania JavaScript na stronie internetowej, która będzie następnie zadzwonić do twojej aplikacji flashowej.
Ta technika jest dokładniej wyjaśniona w dokumentacji projektu flash-selenium. (http://code.google.com/p/flash-selenium/), ale idea techniki odnosi się równie dobrze do WebDriver.
Więc spróbowałeś tego, co napisałeś? Jeśli zrobiłeś to, co napisałeś i jaki był błąd? – Amey
To jest założenie, aby obsłużyć wyskakujące okno winwods –
Po prostu pytam, czy dałeś temu podejściu ujęcie? – Amey