Selenium 如何在Safari(MAC)上的webdriver中上载文件

Selenium 如何在Safari(MAC)上的webdriver中上载文件,selenium,selenium-webdriver,safari,selenium-grid,safaridriver,Selenium,Selenium Webdriver,Safari,Selenium Grid,Safaridriver,我正在尝试使用webdriver将文件上载到Safari(8.0.8)。有人能证实这是可能的吗?我正在搜索这个问题,但找不到明确的信息 我的测试环境: 我使用Win7在本地PC上运行测试,并在MAC机器上运行的Selenium Grid上启动浏览器(hub+节点在MAC Yosemite 10.10.5上运行) 首先,我尝试在MAC上上传直接文件。但它不起作用 Browser.Driver.FindElement(By.Id("inputID")).SendKeys("/Users/admini

我正在尝试使用webdriver将文件上载到Safari(8.0.8)。有人能证实这是可能的吗?我正在搜索这个问题,但找不到明确的信息

我的测试环境: 我使用Win7在本地PC上运行测试,并在MAC机器上运行的Selenium Grid上启动浏览器(hub+节点在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:元素必须是用户可编辑的,才能清除它。(警告:服务器未提供任何stacktrace信息) 命令持续时间或超时: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,CSSSelectorEnabled=true,platform=MAC,secureSsl=true}] 会话ID:空


它不工作,因为它是Safari,或者grid/Safari/远程主机或文件路径有问题(带有/)?

看起来不受支持。

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

  • 使用以下代码在mac中创建.scpt文件
    激活应用程序“Safari”
    告诉应用程序“Safari”
    告诉文件1
    执行JavaScript“document.getElementsByTagName('label')[0]。单击()
    延迟2
    结束语
    结束语
    告诉应用程序“系统事件”
    使用{command down,shift down}键击“G”
    延迟2
    击键“/Users/melamc/Downloads/upload.jpeg”
    延迟2
    击键返回
    延迟2
    击键返回
    延迟2
    结束通话
  • 在需要时触发此文件(编写代码以编程方式运行此文件

  • 我希望这会对您有所帮助,请尝试让我知道

    我做了大量研究,以在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)

    在java中,上述的等价物是

    Driver.setFileDetector(新的LocalFileDetector());

    参考:

    为java编写的代码行从我开始就没有经过测试,因为我目前正在使用c#


    愉快的测试。

    这不是文件路径的问题,我认为safari不支持
    IAllowsFileDetection AllowsDetection = Driver as IAllowsFileDetection;
    if (AllowsDetection != null)
    {
        AllowsDetection.FileDetector = new LocalFileDetector();
    }