2011-09-08 14 views
11

我使用C#中的selenium Webdriver進行webtest。但是,我遇到了一個問題,當瀏覽器窗口不是全尺寸時,彈出窗口會在可見區域外半開。如何以正確的方式關注元素?

問題是,當我觸發.Click();它不會做任何事情,因爲我嘗試點擊的鏈接在查看區域之外。

那麼我如何專注於點擊鏈接工作?我目前正在使用以下解決方法,但我不認爲這是一個好方法。

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

帶空間的sendkeys側重於鏈接,並且每次都使Click工作,但沒有正確的方法來做到這一點?

回答

15

我們一直在玩硒,也遇到了這個問題。我不知道它是整個WebDriver,C#實現,Firefox等版本,但我們發現了一個好的解決方法:

訣竅是強制Selenium在RemoteWebElement類上評估LocationOnScreenOnceScrolledIntoView屬性(由FirefoxWebElement繼承並實現IWebElement)。這迫使瀏覽器滾動,以便元素在視圖中。

我們所做的是使用一個擴展方法的方式:

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; 
     } 
    } 
} 

這種方式,所有我們要做的就是從改變生成的代碼:

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

到:

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

希望它適合你!?

+0

很酷的感謝,我會在星期一試試:),看起來比我的解決方案好;) –

+0

它的工作就像一個魅力。感謝您的意見 –

1

而不是發送空白值的發送密鑰,發送它的空間。這就是選擇複選框的鍵盤快捷鍵。通過

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

driver.find_element(:id, "edit-section").send_keys " "

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

與空間工作對我來說:

只需更換代碼。

我在selenium-server-2.24.1上使用webdriver rspec,並且IE8遇到問題 - 我一直在收到Selenium::WebDriver::Error::ElementNotVisibleError。它在IE9和FF中工作,但沒有IE8,直到我添加了send_keys「」。