如何在Safari(MAC)上的webdriver上传文件

时间:2015-09-15 08:00:43

标签: selenium selenium-webdriver safari selenium-grid safaridriver

我正在尝试使用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 /远程主机或文件路径(带/的东西)有问题?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以使用OSAScript上传。请执行以下操作:

  1. 使用以下代码在mac中创建.scpt文件 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. 在您需要时触发此文件(编写代码以便以编程方式运行此文件)
  3. 我希望这会对你有帮助,试着让我知道

答案 2 :(得分:0)

我已经做了很多研究,以在Mac上的Safari浏览器中完成文件的上传,所幸我提出了以下解决方案。

以下是匹配给定解决方案的可能先决条件:

  • 编程环境:c#
  • 自动化环境:Selenium WebDriver,Selenium Grid
  • 浏览器:Safari(12)
  • 操作系统:MAC(High Sierra)
  • 集线器:Windows计算机,节点:Mac计算机

在上述上传文件的上下文中,可以实现以下代码行。

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#。

测试愉快。