2012-09-11 16 views
15

Tôi đang cố gắng tự động hóa chức năng tải lên tệp trong Google Drive.Trình quản lý web selen - nhấp vào các thành phần ẩn

Phần tử được sử dụng để truyền tham số bị ẩn với chiều cao - 0px.

Không có hành động nào của người dùng sẽ làm cho thành phần này hiển thị. Vì vậy, tôi cần một công việc xung quanh để click vào phần tử trong khi nó không nhìn thấy được.

<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/> 

Các xpath cho các phần tử trên là -

//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input 

Tôi đang sử dụng

WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>) 

Exception -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme nt hiện không hiển thị và có thể không tương tác được với nó.

Tôi đã thử sử dụng JavascriptExecutor. Nhưng không thể tìm thấy cú pháp chính xác.

+0

Hãy xem HTML, là Google Drive chỉ là một hình thức? Nếu vậy, không sử dụng Selenium, chỉ cần viết một kịch bản để gửi một biểu mẫu với dữ liệu bạn chỉ định. – jasop

Trả lời

18

Hãy thử điều này:

WebElement elem = yourWebDriverInstance.findElement(By.xpath("//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input")); 
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';"; 

((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem); 

Các bó trên sẽ thay đổi hiển thị kiểm soát đầu vào tập tin của bạn. Sau đó, bạn có thể tiến hành các bước thông thường để tải lên tệp như:

elem.sendKeys("<LOCAL FILE PATH>"); 

Lưu ý, bằng cách thay đổi chế độ hiển thị của trường nhập bạn đang can thiệp vào ứng dụng đang thử nghiệm. Tiêm kịch bản để thay đổi hành vi là xâm nhập và không được khuyến khích trong các thử nghiệm.

+0

Hoạt động hoàn toàn tốt đẹp !! – praneel

2

Hãy thử mẫu này mã:

JavascriptExecutor executor= (JavascriptExecutor)driver; 
executor.executeScript("document.getElementById('ID').style.display='block';"); 
Select select = new Select(driver.findElement(By.id("ID"))); 
select.selectByVisibleText("value"); 
Thread.sleep(6000); 

Bằng cách sử dụng java script thi hành di chúc và làm cho nguyên tố này có thể nhìn thấy sau đó click vào phần tử thông qua ID. Hy vọng nó hepls ..

0

Hãy thử điều này:

WebElement elem = yourWebDriverInstance.findElement(
    By.cssSelector(".uploadmenu > input")); 
String js = 
    "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';"; 
((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem); 

Ở đây tôi đã thay thế XPath bằng CSS Selector. Hãy cho tôi biết Có phải kịch bản trên đang hoạt động hay không.

0

Bạn có thể cung cấp cho các sau một thử:

((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();"); 
6

giải pháp đơn giản tại đây,

WebElement tmpElement= driver.finElement(ElementLocator); 
JavascriptExecutor executor = JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", tmpElement); 
Các vấn đề liên quan