我正在尝试使用webdriver将文件上传到Safari(8.0.8)。任何人都可以确认它是否有可能?我正在搜索这个问题而无法找到明确的信息。
我的测试环境: 我使用Win7在我的本地PC上运行测试,并在运行在MAC机器上的Selenium Grid上启动浏览器(在MAC Yosemite 10.10.5上运行集线器+节点)
首先,我尝试在MAC上传直接文件。但它没有用。
Browser.Driver.FindElement(By.Id("inputID")).SendKeys("/Users/administrator/Desktop/file.txt");
接下来,我尝试使用LocalFileDetetor,但它也不起作用:
driver.FileDetector = new LocalFileDetector();
Browser.Driver.FindElement(By.Id("inputID")).SendKeys("c:\\file.txt");
接下来,我尝试使用:WebDriverBackedSelenium:
ISelenium safari = new WebDriverBackedSelenium(webDriver, "http://systemname/");
safari.Start();
safari.AttachFile("xpath=//input[@id='inputID']", "e:\\file2.txt");
但它也不起作用。堆栈跟踪:
Selenium.SeleniumException:抛出WebDriver异常 ----> OpenQA.Selenium.InvalidElementStateException:元素必须是用户可编辑的才能清除它。 (警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:7毫秒 构建信息:版本:' 2.47.1',修订版:' 411b314',时间:' 2015-07-30 03:03:16' 系统信息:主机:' mac.domain.company.com',ip:' 192.168.136.67',os.name:' Mac OS X',os .arch:' x86_64',os.version:' 10.10.5',java.version:' 1.8.0_51' 驱动程序信息:org.openqa.selenium.safari.SafariDriver 功能[{browserName = safari,takesScreenshot = true,javascriptEnabled = true,version = 8.0.8,cssSelectorsEnabled = true,platform = MAC,secureSsl = true}] 会话ID:null
它不起作用,因为它是Safari或网格/ safari /远程主机或文件路径(带/的东西)有问题?
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用OSAScript上传。请执行以下操作:
activate application "Safari"
tell application "Safari"
tell document 1
do JavaScript "document.getElementsByTagName('label')[0].click()"
delay 2
end tell
end tell
tell application "System Events"
keystroke "G" using {command down, shift down}
delay 2
keystroke "/Users/melamc/Downloads/upload.jpeg"
delay 2
keystroke return
delay 2
keystroke return
delay 2
end tell
我希望这会对你有帮助,试着让我知道
答案 2 :(得分:0)
我已经做了很多研究,以在Mac上的Safari浏览器中完成文件的上传,所幸我提出了以下解决方案。
以下是匹配给定解决方案的可能先决条件:
在上述上传文件的上下文中,可以实现以下代码行。
DesiredCapabilities dc = new DesiredCapabilities();
dc.SetCapability(CapabilityType.BrowserName, "safari");
dc.SetCapability(CapabilityType.Version, "12");
Driver = new RemoteWebDriver(new Uri("http://Node_Ip_Address:Port/wd/hub/"), dc);
下面的代码行不可思议,(这也适用于Chrome和Firefox。)
IAllowsFileDetection AllowsDetection = Driver as IAllowsFileDetection;
if (AllowsDetection != null)
{
AllowsDetection.FileDetector = new LocalFileDetector();
}
在Java中,上述等效项是
Driver.setFileDetector(new LocalFileDetector());
参考:https://saucelabs.com/blog/selenium-tips-uploading-files-in-remote-webdriver
为Java编写的代码行尚未经过最终测试,因为我目前正在使用c#。
测试愉快。