2012-10-08 35 views
6

Tôi đã làm việc với Selenium WebDriver trong vài tháng và tôi gặp sự cố với trình đơn thả xuống trong ứng dụng web mà tôi đang làm việc .Selenium WebDriver - Không thể đóng menu thả xuống chọn trong Chrome trên Mac OS X

Điều đang xảy ra là thử nghiệm đang mở trang, xác minh một số yếu tố trên trang bằng cách tìm chúng và sau đó đảm bảo chúng được hiển thị. Sau khi thực hiện điều đó, có một số văn bản được nhập vào các trường khác nhau, sau đó chọn hộp chọn tùy chọn để mở menu thả xuống. Tiếp theo thử nghiệm này lặp qua tất cả các tùy chọn trong trình đơn thả xuống cho đến khi nó tìm thấy tùy chọn cần thiết, sau đó nhấp vào tùy chọn đó.

Tại thời điểm này, tùy chọn được chọn nhưng menu thả xuống không bị đóng.

Tôi đã thử nhấp vào tùy chọn chọn một lần nữa nhưng điều này không có hiệu lực, trong phần còn lại của bài kiểm tra các trang khác được điều hướng đến và menu không đóng.

Sau đó trang được lưu và sau đó điều hướng khỏi. Tuy nhiên trình đơn thả xuống vẫn còn cho đến khi trình duyệt được đóng lại.

Đây là mã từ ứng dụng:

<select id="options" name="options" class="options"> 
<option value="option1 (auto)">option1 (auto)</option> 
<option value="option2">option2</option> 
<option value="option3">option3</option> 
</select> 

Trả lời

1

Tôi đã giải quyết vấn đề với một công trình xung quanh, vì đây là cách duy nhất mà tôi đã tìm thấy để làm việc.

Trước hết cảm ơn eugene.polschikov cho câu trả lời của bạn mặc dù nó không giải quyết được vấn đề nó đã mở mắt của tôi một chút, tôi không có kiến ​​thức về người xây dựng hành động, và nó đã cho tôi một số ý tưởng tuyệt vời về các bài kiểm tra trong tương lai. Ngoài ra cảm ơn bạn với bất cứ ai đọc điều này và suy nghĩ về một giải pháp có thể.

Cách giải quyết hiện tại là lựa chọn không được mở. Cách mã hoạt động là nó sẽ mở danh sách và tìm danh sách mong muốn và nhấp vào nó, tại thời điểm này lựa chọn sẽ không đóng, vì vậy bây giờ mã không còn mở lựa chọn ở nơi đầu tiên, nó nhấp chuột trên tùy chọn ẩn để chọn nó, không phải 100% những gì tôi muốn, nhưng nó hoạt động.

Lập trình hạnh phúc, Ben.

2

giải pháp đầu tiên tôi sẽ cố gắng là để bấm vào tùy chọn trình đơn theo những cách khác nhau. API Selenium cung cấp cho chúng tôi khả năng này. 1) xác định vị trí ví dụ: bộ chọn css của các phần tử.

String cssOption1 = "select[id='options']>option[value='option1 (auto)']"; 
String cssOption2 = "select[id='options']>option[value='option2']"; 
String cssOption3 = "select[id='options']>option[value='option3']"; 

Cũng đừng quên để xác minh rằng bạn tìm thấy yếu tố đúng ví dụ .in firepath, firebug addon trong ffox: proper location on web element in firepath

cách tiếp cận 1

driver.findElement(By.cssSelector(cssOption2)).click(); 

cách tiếp cận 2 sử dụng action builder API

WebElement mnuOptionElement; 
mnuOptionElement = driver.findElement(By.cssSelector(cssOption2)); 
Actions builder = new Actions(driver); 
// Move cursor to the Main Menu Element 
builder.moveToElement(mnuOptionElement).click(); 

chi tiết về Actions Builder bạn có thể nhận được here

cách tiếp cận 3 sử dụng jsExecutor bấm vào yếu tố web. Luôn luôn làm việc cho tôi trong mọi tình huống.

JavascriptExecutor js = (JavascriptExecutor) driver; 
     StringBuilder stringBuilder = new StringBuilder(); 
     stringBuilder.append("var x = $(\'"+cssOption2+"\');"); 
     stringBuilder.append("x.click();"); 
     js.executeScript(stringBuilder.toString()); 

Hope làm việc này cho bạn

+0

Cám ơn các bạn trả lời, tuy nhiên không có vấn đề làm thế nào tôi bấm vào danh sách thả xuống menu vẫn mở. Tôi cũng đã thử các cách khác nhau để nhấp vào lựa chọn để thử và đóng nó nhưng than ôi, không may mắn. –

+0

bạn đã thử nhấp chuột bằng javascript chưa? nó là phần thứ ba tôi mô tả –

+0

Vâng, tôi không phải tập trung vào kịch bản java nhưng bản thân tôi và một đồng nghiệp đã thử JQuery và javascript và không có kết quả. Chúng tôi luôn có thể mở hộp thả xuống, nhưng chúng tôi không bao giờ có thể đóng, chúng tôi đã cố gắng gửi các lần nhấn phím và nhấp chuột, nhưng không may mắn. Xin cảm ơn một lần nữa, –

0

Nếu một con người có thể nhấn Escape để thoát khỏi combobox, bạn có thể làm điều đó trong Selenium bằng cách chuyển sang yếu tố tích cực:

from selenium.webdriver.common.keys import Keys 
    element = driver.switch_to.active_element 
    element.send_keys(Keys.ESCAPE)  
Các vấn đề liên quan