2011-09-08 28 views
11

Làm webtest bằng cách sử dụng Trình quản trị web selen trong C#. Nhưng tôi đang gặp sự cố khi cửa sổ trình duyệt không ở kích thước đầy đủ, cửa sổ bật lên sẽ mở ra một nửa bên ngoài khu vực hiển thị.Cách tập trung vào yếu tố đúng cách?

Vấn đề là khi tôi kích hoạt .Click(); nó không làm bất cứ điều gì vì liên kết tôi cố gắng nhấp vào nằm ngoài khu vực đã xem.

Vậy làm cách nào để tập trung vào liên kết để nhấp chuột vào hoạt động? Im hiện đang sử dụng cách giải quyết sau đây nhưng tôi không nghĩ đó là một cách tốt đẹp.

 _blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(""); 
     _blogPostPage.FindElement(By.XPath(_popupLogin)).Click(); 

Các phím gửi có không gian tập trung vào liên kết và làm cho Nhấp vào hoạt động mọi lúc, nhưng không có cách nào để thực hiện?

Trả lời

15

Chúng tôi đã chơi với Selenium và cũng đã gặp sự cố này. Tôi không biết liệu đó có phải là toàn bộ WebDriver hay không, việc triển khai C#, phiên bản Firefox vv, nhưng chúng tôi đã tìm được giải pháp thay thế:

Bí quyết là buộc Selenium đánh giá tài sản LocationOnScreenOnceScrolledIntoView trên RemoteWebElement lớp (được kế thừa bởi FirefoxWebElement và triển khai IWebElement). Điều này buộc trình duyệt cuộn để phần tử ở chế độ xem.

Cách chúng tôi đã thực hiện nó là sử dụng một phương pháp khuyến nông:

using OpenQA.Selenium; 
using OpenQA.Selenium.Remote; 

namespace Namespace 
{ 
    public static class ExtensionMethods 
    { 
     public static IWebElement FindElementOnPage(this IWebDriver webDriver, By by) 
     { 
      RemoteWebElement element = (RemoteWebElement)webDriver.FindElement(by); 
      var hack = element.LocationOnScreenOnceScrolledIntoView; 
      return element; 
     } 
    } 
} 

cách này tất cả chúng ta phải làm là thay đổi mã được tạo từ:

driver.FindElement(By.Id("elementId")).Click(); 

tới:

driver.FindElementOnPage(By.Id("elementId")).Click(); 

Hy vọng nó phù hợp với bạn !?

+0

Xin cảm ơn, tôi sẽ cố gắng vào thứ hai :), trông đẹp hơn giải pháp của tôi;) –

+0

Nó hoạt động như một sự quyến rũ. Cảm ơn các đầu vào –

1

Thay vì gửi phím gửi cho giá trị trống, hãy gửi cho không gian. Đó là phím tắt để chọn hộp kiểm.

Chỉ cần thay thế mã:

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(""); 
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click(); 

bởi

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space); 
0

driver.find_element(:id, "edit-section").send_keys " " với không gian làm việc cho tôi.

Tôi đang sử dụng trình quản trị web rspec với selenium-server-2.24.1 và tôi gặp sự cố với IE8 - Tôi tiếp tục nhận được Selenium::WebDriver::Error::ElementNotVisibleError. Nó đã làm việc trong IE9 và FF nhưng không phải IE8 cho đến khi tôi thêm send_keys "".

Các vấn đề liên quan