猿问

Selenium Java:无法通过自定义上传上传文件

我试图上传一个文件,但它引发了异常。上传按钮是定制的。我什至试图点击它,但它卡在那里。


    new WebDriverWait(driver,100).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='divProfileSetting']/div/div/div/div[7]/div[2]/div/div/div/label/span")));

    WebElement UploadingFile1 = driver.findElement(By.xpath("//div[@id='divProfileSetting']/div/div/div/div[7]/div[2]/div/div/div/label/span"));

            //UploadingFile1.click();


    UploadingFile1.sendKeys("E:\\Hatha.jpg");

HTML:


<div class="span12 logouploadContainer">


    <input type="file" id="file" name="file" tabindex="-1" style="position: fixed; left: -9999px;">

    <div class="bootstrap-filestyle" style="display: inline;" tabindex="0">

        <input type="text" class="input-large" disabled=""> 

        <label for="file" class="btn btn-primary">

            <i class=" icon-white icon-folder-open" data-original-title="" title=""></i> 

            <span data-original-title="" title="">Choose File</span>

        </label>

    </div>


    <div id="logo-div" class="hidden">

        <button type="button" id="btnResetLogo" class="btn" style="margin-left: 5px;" data-original-title="" title="">Remove</button>

        <div id="imgContainer" style="height: 100%; width: 100px; padding: 5px; overflow: hidden;">

            <img alt="Client Logo" id="imgClient" src="">

        </div>

    </div>



</div>

也尝试过等待元素,但似乎有一些问题。



蛊毒传说
浏览 92回答 2
2回答

繁星coding

尝试使用 .sendKeys() 上传文件仅在与<input type=file>( https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file ) 一起使用时才有效。查看您的代码,您正在尝试将文件信息发送到<span>元素。而是尝试:WebDriverWait wait = new WebDriverWait(driver, 15, 100);WebElement uploadFileElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("file")));uploadFileElement.sendKeys("E:\\Hatha.jpg");这将等待<input type="file">元素变得可见,然后它将使用 sendKeys() 发送文件。如果永远不可见,这将不起作用<input type="file">,如果是这种情况,您可以通过使用 JavaScript 使其可见来解决问题,但这将是一种黑客行为,并不代表最终用户会做什么。*编辑*如果您决定采用 JavaScript hack 路线,您可以执行以下操作:WebDriverWait wait = new WebDriverWait(driver, 15, 100);WebElement uploadFileElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("file")));JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript("arguments[0].style.visibility='visible'", uploadFileElement);uploadFileElement.sendKeys("E:\\Hatha.jpg");请注意,预期条件现在等待元素存在于 DOM 中,而不是等待它可见,然后我们使用 JavaScript 显式地使元素可见,然后使用 sendKeys() 与它交互。您可能不需要将您的潜水员对象转换为 JavascriptExecutor。如果您有 RemoteWebDriver、ChromeDriver 或 FirefoxDriver 的实例而不是 WebDriver 的实例,则该方法已经可用。*编辑2 *再看一遍,真正的问题是<input type="file">元素已被推离屏幕左侧。因此,修复是上述的变体。除了强制元素可见,我们可以使用 JavaScript 强制偏移量为 0 而不是 -9999px:WebDriverWait wait = new WebDriverWait(driver, 15, 100);WebElement uploadFileElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("file")));JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript("arguments[0].style.left='0'", uploadFileElement);uploadFileElement.sendKeys("E:\\Hatha.jpg");

哈士奇WWW

ElementNotInteractableException是在找到元素时引起的,但您无法与之交互。例如,您可能无法单击或发送密钥。这可能有几个原因:该元素不可见/不显示。元素不在屏幕上。该元素位于另一个元素的后面或隐藏。用户首先需要执行一些其他操作才能启用它。解决方案等到元素可见/可点击我看到你已经添加了,但它被配置为wait只等到.&nbsp;因此,如果元素不在等待将结束。尝试至少将其增加到或取决于站点的速度。100mstimeoutinteractable100ms1 second i.e 1000ms
随时随地看视频慕课网APP

相关分类

Java
我要回答