亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Selenium Java:無法通過自定義上傳上傳文件

Selenium Java:無法通過自定義上傳上傳文件

蠱毒傳說 2022-10-20 17:13:17
我試圖上傳一個文件,但它引發了異常。上傳按鈕是定制的。我什至試圖點擊它,但它卡在那里。    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>也嘗試過等待元素,但似乎有一些問題。
查看完整描述

2 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

嘗試使用 .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");


查看完整回答
反對 回復 2022-10-20
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

ElementNotInteractableException是在找到元素時引起的,但您無法與之交互。例如,您可能無法單擊或發送密鑰。

這可能有幾個原因:

  1. 該元素不可見/不顯示。

  2. 元素不在屏幕上。

  3. 該元素位于另一個元素的后面或隱藏。

  4. 用戶首先需要執行一些其他操作才能啟用它。

解決方案

等到元素可見/可點擊

我看到你已經添加了,但它被配置為wait只等到. 因此,如果元素不在等待將結束。嘗試至少將其增加到或取決于站點的速度。100mstimeoutinteractable100ms1 second i.e 1000ms


查看完整回答
反對 回復 2022-10-20
  • 2 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號