![](/img/trans.png)
[英]File Upload functionality of Selenium web driver not working through sendkeys
[英]How to upload a file in Selenium when sendKeys is not working
您可以嘗試使用Selenium中的JavaScriptExecutor通過執行JavaScript腳本來使此元素不隱藏。 我在項目中做了這種事情,因為在IE中,SendKeys對於隱藏的輸入也不起作用。
您需要使用JS使輸入可見。 完整步驟如下所述:
// Find file input element
WebElement input = driver.findElement(By.cssSelector("input[type='file']"));
// Make sure element is visible
((JavascriptExecutor) driver).executeScript("arguments[0].style.display = 'block';", input);
// Specify you local file path here
input.sendKeys("/path/to/file/on/machine/which/runs/tests");
如果使用RemoteDriver,請不要忘記添加以下內容:
// Configure your client to upload local files to remote Selenium instance
driver.setFileDetector(new LocalFileDetector());
注意:文件路徑應該是絕對的。 您可以通過以下方式實現:
String getFilePath(String filePath) {
new File(filePath).absolutePath
}
如果類型文件位於 shadowroot 中,則您當前無法使用 selenium 訪問它。
這與字段不可見無關
通常,您可以執行以下操作:
$el = $driver->findElements(\WebDriverBy::xpath('//*[@type="file"]')
$el->setFileDetector(new \LocalFileDetector());
$el->sendKeys($imagepath);
// or mink:
$el = $driver->getPage()->findAll('xpath', '//*[@type="file"]');
$el->attachFile($path);
但是,如果它在 shadow-root 中,在控制台中使用它不會找到它:
$x('//*[@type="file"]')
這也不會:
$("input[type='file']")
可以通過js檢查輸入元素並右鍵獲取元素,大概會得到這樣的元素路徑
document.querySelector("body > something").shadowRoot.querySelector("div > div > something").shadowRoot.querySelector("#someid")
這意味着它只能通過影子根訪問,並且可以使用上面的 javascript 來完成
Selenium Javascript 無法返回元素(但如果 selenium 可以獲取元素,則可以如上所示進行上傳) Javascript 將不允許您上傳,因為它不安全(但您可以從上面的 js 中獲取元素)
但問題是,您不能將 javascript 元素作為 php selenium 元素返回。 所以 2 沒有辦法一起工作。
真正的問題是,硒還不支持影子根
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.