2017-10-17 56 views
4

存在數據類型input[type="text" i]的文件上傳表單。 我想要選擇並上傳一個沒有Robot classKeyEvent的文件。 HTML中的類如下所示:class="form-control ng-pristine ng-invalid ng-touched"WebDriver中的AngularJS形式

我嘗試上傳文件時沒有打開文件選擇器窗口,因此請使用以下代碼。

driver.findElement(By.cssSelector("myfilepath"); 

當我使用XPath識別對象,並通過文件路徑我有一個例外,是相同的。

org.openqa.selenium.ElementNotVisibleException: element not visible

類似的網站和形式:https://angular-file-upload.appspot.com/#2

+0

可以看看的頁面? –

+0

聽起來就像你試圖填充不可見的元素的值。您應該首先滾動到該元素以填充它。也不知道你的css選擇器'myfilepath' - 這只是一個例子,或者你有'myfilepath'組件/指令嗎? –

+0

@MartinAdámek:無需滾動,加載頁面後即可看到。 'myfilepath'變量包含我的計算機上文件的確切路徑。 – plaidshirt

回答

1

你應該選擇input[file]第一(例如,通過CSS選擇器),路徑設置爲文件,其值爲:

driver.findElement(By.cssSelector("input.your-file-input-class")).sendKeys("/my/file/path"); 

您需要首先通過input.your-file-input-class找到元素。根據您的標記調整CSS選擇器。

確保填充正確輸入的最佳方法是在元素上添加一些類或標識。如果您知道頁面上只有一個文件輸入,您也可以使用input[type="text"]作爲選擇器。

driver.findElement(By.cssSelector("input[type=\"text\"]")).sendKeys("/my/file/path"); 

順便說一句,你也是在評論中指出,這是myfilepath包含路徑的變量。如果是這樣,刪除引號,你不能把它作爲一個字符串值:

String myfilepath = "/path/to/file"; 

driver.findElement(By.cssSelector("input[type=\"text\"]")).sendKeys(myfilepath); 

如果錯誤蜜餞,你應該儘量等到元素是可見的,可以幫助過:

WebDriverWait wait = new WebDriverWait(driver, 60); // 1 min timeout 
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type=\"text\"]"))); 
el.sendKeys(myfilepath); 
使用
+0

我使用'WebDriver 3.6.0'和'setAttribute'方法無法解析。 – plaidshirt

+0

看起來你需要在JS中做到這一點,將更新答案。 –

+0

所以java元素上的方法被稱爲'sendKeys','setAttribute'是來自js DOM元素,對不起混淆... –

1

JavaScript中,我們可以做到這一點

javascript代碼:

var test=document.querySelector('your css selector'); 

test.setAttribute("value","your path value"); 

編寫JavaScript代碼字符串,然後傳遞到javascriptExecutor與csspathselector,文件路徑值

硒碼一起:

String js = "var test=document.querySelector(arguments[0]);test.setAttribute('value',arguments[1]);"; 
JavascriptExecutor jse = (JavascriptExecutor)driver; 
jse.executeScript(js, "yourcssSelectorPath","filepath"); 
+0

它拋出錯誤:'Runtime.evaluate拋出異常:SyntaxError:失蹤)參數列表後' – plaidshirt

+0

對不起,我錯過了關閉後參數[0],試試這個 – Raju

+0

String js =「var test = document.querySelector(arguments [0] ); test.setAttribute( 「值」,參數[1]);」 – Raju