3

我正在尝试使用 webdriver 将文件上传到 Safari(8.0.8)。任何人都可以确认它是否可能?我正在搜索这个问题,但找不到明确的信息。

我的测试环境:我在本地 PC 上使用 Win7 运行测试,浏览器从在 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 Capabilities [{browserName=safari, takeScreenshot=true, javascriptEnabled=true, version=8.0.8, cssSelectorsEnabled=true, platform=MAC ,secureSsl=true}] 会话 ID:空

它不起作用,因为它是 Safari,或者网格/野生动物园/远程主机或文件路径(带有 / 的东西)有问题?

4

3 回答 3

0

我做了很多研究来完成在 mac 上的 safari 浏览器中上传文件,幸运的是我想出了以下解决方案。

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

  • 编程环境:c#
  • 自动化环境:Selenium WebDriver、Selenium Grid
  • 浏览器:Safari (12)
  • 操作系统:MAC(高山脉)
  • 集线器: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

因为我目前正在使用 c#,所以为 java 编写的代码行没有经过我的测试。

快乐测试。

于 2019-02-13T07:55:01.493 回答
0

看起来不支持https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/4220

于 2016-08-23T20:56:10.267 回答
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. 在需要时触发此文件(编写代码以编程方式运行此文件

我希望这会帮助你,试着让我知道

于 2016-11-18T10:29:06.307 回答