2011-09-27 20 views
20

Tôi có khung nội tuyến được tải khi tôi nhấp vào tab trên trang. Khi tôi sử dụng Firebug để nhìn vào iframe trên IE8, tất cả tôi thấy là:Selen và iframe

iframe id=tabContextFrame class=contextFrame contentEditable=inherit src=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 name=tabContextFrame url=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 scrolling=auto

và đó là hệ thống phân cấp it.The dưới iframe không thể được nhìn thấy. Tôi muốn nhấp vào liên kết trong khung nội tuyến. Để tìm các phần tử trong khung nội tuyến, tôi đã thực hiện một selenium.click("on the tab that loads the iframe") và sau đó selenium.getHtmlSource(). Từ nguồn này, tôi ít nhất cũng có thể xác định được mối quan tâm của tôi. Tôi đã làm một selenium.click("//span[text()='Link']") nhưng nó dường như không làm bất cứ điều gì. Bất kỳ ý tưởng xin vui lòng?

Đây là mã:

selenium.click("//span[text()='tab that loads iframe']"); 
Thread.sleep(5000); 
selenium.selectFrame("tabContextFrame");   
selenium.mouseOver("//span[text()='Link']"); 
selenium.mouseDown("//span[text()='Link']"); 
selenium.mouseUp("//span[text()='Link']"); 
Thread.sleep(5000); 
selenium.selectFrame("null"); 
+1

Bạn đã thử selenium 2.0 với trình điều khiển web chưa? U có thể sử dụng driver.SwitchTo(). Frame() – Sudara

+0

có thể trùng lặp với [xử lý iframe trong webdriver] (http://stackoverflow.com/questions/9942928/handling-iframe-in-webdriver) – Innovation

Trả lời

38

Tôi đoán bạn đang sử dụng Selenium 1.0. Bạn đã xem xét Selenium 2.0 và WebDriver chưa. Tôi đã tìm thấy thông tin sau và nó hoạt động cho tôi:

Hỏi: Làm cách nào để nhập vào iframe nội dungChỉnh sửa? A: Giả sử rằng các iframe được đặt tên là "foo":

driver.switchTo().frame("foo"); 
WebElement editable = driver.switchTo().activeElement(); 
editable.sendKeys("Your text here"); 

Đôi khi điều này không làm việc, và điều này là bởi vì các iframe không có bất kỳ nội dung. Trên Firefox, bạn có thể thực hiện sau đây trước khi "SendKeys":

((JavascriptExecutor) driver).executeScript("document.body.innerHTML = '<br>'"); 

này là cần thiết vì các iframe không có nội dung theo mặc định: không có gì để gửi đầu vào bàn phím để là. Lệnh gọi phương thức này chèn một thẻ trống , làm cho mọi thứ trở nên độc đáo.

Hãy nhớ để chuyển ra khỏi khung khi bạn đã hoàn tất (như tất cả tương tác hơn nữa sẽ ở cùng khung cụ thể này):

driver.switchTo().defaultContent(); 

Tôi thấy điều này trên http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions

lái xe
0

Sử dụng .switchTo(). defaultContent(); trước tiên, hãy thực hiện thao tác của bạn