-
-
Save santiycr/1508946 to your computer and use it in GitHub Desktop.
require 'rubygems' | |
require "test/unit" | |
require 'selenium-webdriver' | |
class ExampleTest < Test::Unit::TestCase | |
def setup | |
caps = Selenium::WebDriver::Remote::Capabilities.firefox | |
caps.version = "5" | |
caps.platform = :XP | |
caps[:name] = "Remote File Upload using Selenium 2 with Ruby" | |
caps['selenium-version'] = "2.18.0" | |
@driver = Selenium::WebDriver.for( | |
:remote, | |
:url => "http://<username>:<api-key>@saucelabs.com:4444/wd/hub", | |
:desired_capabilities => caps) | |
@driver.file_detector = lambda do |args| | |
# args => ["/path/to/file"] | |
str = args.first.to_s | |
str if File.exist?(str) | |
end | |
end | |
def test_sauce | |
@driver.navigate.to "http://sl-test.herokuapp.com/guinea_pig/file_upload" | |
element = @driver.find_element(:id, 'myfile') | |
element.send_keys "/Users/sso/SauceLabs/sauce/hostess/maitred/maitred/public/images/darkbulb.jpg" | |
@driver.find_element(:id, "submit").click | |
@driver.find_element(:tag_name, "img") | |
assert "darkbulb.jpg (image/jpeg)" == @driver.find_element(:tag_name, "p").text | |
end | |
def teardown | |
@driver.quit | |
end | |
end |
import junit.framework.Assert; | |
import junit.framework.TestCase; | |
import org.openqa.selenium.*; | |
import org.openqa.selenium.remote.*; | |
import java.net.URL; | |
import java.util.concurrent.TimeUnit; | |
public class TestingUploadSe2Sauce extends TestCase { | |
private RemoteWebDriver driver; | |
public void setUp() throws Exception { | |
DesiredCapabilities capabillities = DesiredCapabilities.firefox(); | |
capabillities.setCapability("version", "7"); | |
capabillities.setCapability("platform", Platform.XP); | |
capabillities.setCapability("selenium-version", "2.18.0"); | |
capabillities.setCapability("name", "Remote File Upload using Selenium 2's FileDetectors"); | |
driver = new RemoteWebDriver( | |
new URL("http://<username>:<api-key>@ondemand.saucelabs.com:80/wd/hub"), | |
capabillities); | |
driver.setFileDetector(new LocalFileDetector()); | |
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); | |
} | |
public void testSauce() throws Exception { | |
driver.get("http://sl-test.herokuapp.com/guinea_pig/file_upload"); | |
WebElement upload = driver.findElement(By.id("myfile")); | |
upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg"); | |
driver.findElement(By.id("submit")).click(); | |
driver.findElement(By.tagName("img")); | |
Assert.assertEquals("darkbulb.jpg (image/jpeg)", driver.findElement(By.tagName("p")).getText()); | |
} | |
public void tearDown() throws Exception { | |
driver.quit(); | |
} | |
} | |
Hello Santi,
I am facing issue with uploading the file on remote machine Sauce lab using Selenium and C#.
so Can you provide the code for how to detect the Local file path.
IAllowsFileDetection allowsDetection = (IAllowsFileDetection)wd;
allowsDetection.FileDetector = new LocalFileDetector();
string FilePath = "C:\\Users\\ABC\\Downloads\\Presentation1.ppt";
wd.FindElement(By.CssSelector(".edit")).SendKeys(FilePath);
Execption:
System.InvalidOperationException was unhandled
HResult=-2146233079
Message=invalid entry size (expected 786432 but got 393216 bytes)
Source=WebDriver
StackTrace:
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
Thanks
@yogeshkachare
This is because you select edit in your selector. You should select your input element and then use SendKeys for this element.
Hi @santiycr,
I am new on Selenium-SauceLabs. And I met one issue when try your code(in ruby) to test upload file: ETIMEDOUT: Operation timed out - connect(2) for "saucelabs.com" port 4445
Could you help on this, Thanks.
Below are the code:
require 'rubygems'
require "test/unit"
require 'selenium-webdriver'
class FileDector < Test::Unit::TestCase
def setup
caps = Selenium::WebDriver::Remote::Capabilities.firefox
caps.version = "33"
caps.platform = :Windows
caps[:name] = "Remote File Upload using Selenium 2 with Ruby"
caps['selenium-version'] = "2.42.0"
@driver = Selenium::WebDriver.for(
:remote,
:url => "http://{username}:{key}@saucelabs.com:4445/wd/hub",
:desired_capabilities => caps)
@driver.file_detector = lambda do |args|
# args => ["/path/to/file"]
str = args.first.to_s
str if File.exist?(str)
end
end
def test_sauce
@driver.navigate.to "http://sl-test.herokuapp.com/guinea_pig/file_upload"
element = @driver.find_element(:id, 'myfile')
element.send_keys "/Users/zhangfei/desktop/Logo/accurate-pest.png"
@driver.find_element(:id, "submit").click
@driver.find_element(:tag_name, "img")
assert "accurate-pest.png (image/png)" == @driver.find_element(:tag_name, "p").text
end
def teardown
@driver.quit
end
def Test
a = FileDector.new(@driver)
a.setup
a.test_sauce
end
end
Does anyone how you could solve uploading a file to a remote server on js?
Hi Santi,
I am using selenium with java and want to upload file.My application does not supports sendkeys because after clicking select file windows popup gets open up. So,I am using AutoIt in this case to handle waindowspop but want to run on remote machine(Suacebrowser)
Please help!
Hi Santi,
I am using this implementation in JAVA, with latest version of Selenium and Firefox. It works fine in Chrome, but
I am getting the below error in firefox -
org.openqa.selenium.UnsupportedCommandException: Unrecognized command: POST /session/fd481a91-f664-114b-8363-f4a64ee30518/file
Command duration or timeout: 18 milliseconds
Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'
System info: host: 'Vaibhav.local', ip: '172.20.57.75', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.10.5', java.version: '1.8.0_66'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=46.0.1, platform=MAC, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=false, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: fd481a91-f664-114b-8363-f4a64ee30518
Can you help me out?
This procedure fails for me when the file in question is large. In my case, it's ~1.6GB. When I do this to a remote Selenium grid I have, it get an error that Java is out of heap space. Not sure how to fix that since I've already given both the hubs and the nodes a 16G max heap.
file_detector needs updated to str if File.exist?(str) and File.file?(str)
to follow a bug with string "." being treated as a folder
SeleniumHQ/selenium@3dadcdc
i'm wondering if this technique has issues with test run on iOS browsers? works great in 'regular' browsers, but i think i am seeing that it is not working as expected when testing against ipad and iphone browsers.