Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要webdriver的帮助和隐藏文件上传元素的Javascript吗_Javascript_Selenium_Webdriver - Fatal编程技术网

需要webdriver的帮助和隐藏文件上传元素的Javascript吗

需要webdriver的帮助和隐藏文件上传元素的Javascript吗,javascript,selenium,webdriver,Javascript,Selenium,Webdriver,我正在尝试在客户端web应用程序中实现文件上传场景的自动化。整个文件上传表单的代码如下所示 <td valign="top"> <iframe id="batchLoad:inputFile:uploadFrame" class="iceInpFile" width="600px" scrolling="no" height="30px" frameborder="0" title="Input File Frame" style="border

我正在尝试在客户端web应用程序中实现文件上传场景的自动化。整个文件上传表单的代码如下所示

<td valign="top">
    <iframe id="batchLoad:inputFile:uploadFrame" class="iceInpFile" width="600px" scrolling="no" height="30px"             frameborder="0" title="Input File Frame" style="border-collapse:collapse; border-spacing:0px; padding:0px;" src="/hip-webapp/block/resource/LTExMzg4MjQzMTY=/" name="batchLoad:inputFile:uploadFrame" marginwidth="0"       marginheight="0" allowtransparency="true">
        <html style="overflow:hidden;">
            <head>
                <body style="background-color:transparent; overflow:hidden">
                    <form id="fileUploadForm" enctype="multipart/form-data" action="/hip-webap/uploadHtml" method="post">
                        <input type="hidden" value="batchLoad:inputFile" name="ice.component">
                        <input type="hidden" value="3" name="ice.view">
                        <input class="iceInpFileTxt" type="file" size="35" name="upload">
                        <input class="iceInpFileBtn" type="submit" value="Upload">
                    </form>
                </body>
        </html>
    </iframe>
    <br>
    <span id="batchLoad:j_id537"></span>
</td>
从这里得到了提示

但现在我得到了语法错误。我使用Selenium IDE获得了XPath。我也试过这个,但也没用

((JavascriptExecutor)driver).executeScript("document.getElementByClassName(iceInpFileTxt).style.visibility = 'visible';");
((JavascriptExecutor)driver).executeScript("document.getElementByClassName('iceInpFileTxt').value = 'D:\\AD\\Prac\\Prac\\002 EditPrac Add Person Error.xml-revHEAD.svn000.tmp.xml'");

请给出建议。

因为您正在使用的页面上有一个
元素,您需要:

完成后,请再次尝试通常的上载方法

driver.findElement(By.name("upload")).sendKeys("D:\\AD\\Prac\\Prac\\002 EditPrac Add Person Error.xml-revHEAD.svn000.tmp.xml");
请注意,当您尝试与
之外的元素交互时,必须执行
驱动程序.switchTo().defaultContent()事先


旁注:

  • iframe
    没有结束标记。这不是一个问题,但您可能会考虑,因为您很可能正在开发web:)
  • 您当然不必使不可见元素可见,也不应该手动将文件注入隐藏的输入元素,除非使用某些Flash/Silverlight控件。您可以直接设置
  • String ew=(String)js.executeScript(“document.getElementByXPath('//form[@id='fileUploadForm']]/input[3]”)

    包含一个错误。您正在使用嵌套的
    ,但它不起作用。您应该通过
    \
    转义内部单引号。此外,它应该返回一个
    WebElement
    ,因此您应该将结果强制转换为
    WebElement
    ,而不是
    字符串

  • js.executeScript(j,ew)

    如上所述,第二个参数应该是
    WebElement
    。此外,如果您以前切换到了正确的帧,则可以通过
    driver.findElement()
    以通常的方式找到它

  • document.getElementByClassName()
    不存在。正确的方法名称是
    document.getElementsByClassName()
    (注意复数“元素”)。它返回一组元素,因此您需要在for循环中迭代它们,或者盲目地选择第一个(
    [0]

  • document.getElementByClassName(iceInpFileTxt).style.visibility='visible'

    包含错误,方法(如果存在)采用字符串,因此您应该引用
    “iceInpFileTxt”


因为您正在使用的页面上有一个
元素,所以您需要:

完成后,请再次尝试通常的上载方法

driver.findElement(By.name("upload")).sendKeys("D:\\AD\\Prac\\Prac\\002 EditPrac Add Person Error.xml-revHEAD.svn000.tmp.xml");
请注意,当您尝试与
之外的元素交互时,必须执行
驱动程序.switchTo().defaultContent()事先


旁注:

  • iframe
    没有结束标记。这不是一个问题,但您可能会考虑,因为您很可能正在开发web:)
  • 您当然不必使不可见元素可见,也不应该手动将文件注入隐藏的输入元素,除非使用某些Flash/Silverlight控件。您可以直接设置
  • String ew=(String)js.executeScript(“document.getElementByXPath('//form[@id='fileUploadForm']]/input[3]”)

    包含一个错误。您正在使用嵌套的
    ,但它不起作用。您应该通过
    \
    转义内部单引号。此外,它应该返回一个
    WebElement
    ,因此您应该将结果强制转换为
    WebElement
    ,而不是
    字符串

  • js.executeScript(j,ew)

    如上所述,第二个参数应该是
    WebElement
    。此外,如果您以前切换到了正确的帧,则可以通过
    driver.findElement()
    以通常的方式找到它

  • document.getElementByClassName()
    不存在。正确的方法名称是
    document.getElementsByClassName()
    (注意复数“元素”)。它返回一组元素,因此您需要在for循环中迭代它们,或者盲目地选择第一个(
    [0]

  • document.getElementByClassName(iceInpFileTxt).style.visibility='visible'

    包含错误,方法(如果存在)采用字符串,因此您应该引用
    “iceInpFileTxt”


切换到框架有帮助,非常感谢!现在我不需要javascript来取消隐藏该元素。但仍然感谢您的旁注!切换到框架有帮助,非常感谢!现在我不需要javascript来取消隐藏该元素。但仍然感谢您的旁注!
driver.findElement(By.name("upload")).sendKeys("D:\\AD\\Prac\\Prac\\002 EditPrac Add Person Error.xml-revHEAD.svn000.tmp.xml");