2016-10-12 26 views
1

我無法讓selenium webdriver識別並點擊導航至www.oneplace.com時顯示的覆蓋圖的任何部分。點擊時,疊加層將被解散。請參閱下面的我的硒代碼Selenium似乎無法識別覆蓋

IWebDriver wd = new ChromeDriver(); 
try {  
    wd.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(7)); 
    wd.Navigate().GoToUrl("https://www.google.co.uk/); 
    wd.Navigate().GoToUrl("http://www.oneplace.com/"); 
    wd.FindElement(By.Id("takeoverOverlay")).Click(); 

    if (!wd.FindElement(By.TagName("html")).Text.Contains("DONATE")) { 
     Console.Error.WriteLine("verifyTextPresent failed"); 
    } 
} 
finally { wd.Quit(); } 

回答

1

當您自動執行方案時,自動執行用戶的操作。用戶會做什麼來關閉彈出窗口?他們會點擊右上角的X.右鍵單擊瀏覽器中的該元素並選擇Inspect(或任何變體在您最喜歡的瀏覽器中)。 X的元素是

<img class="closeTakeover" ... src="http://cdn.salemweb.net/zcast/shared/close-btn.png?v=1"> 

因此,我們可以使用下面的代碼關閉它。

wd.FindElement(By.CssSelector("img.closeTakeover")).Click(); 

一對夫婦的其他評論...

  1. 爲什麼你導航到谷歌再到oneplace?你應該能夠刪除第一個導航?

  2. 我建議你刪除隱含的等待,只使用顯式等待。

  3. 您並不是真的想搜索尋找DONATE的整個頁面(HTML)文本。它可能以某些書或文章的名義出現,並且當它實際上應該是失敗時記錄通行證。找到您期望(或不期望)包含DONATE的特定元素,並僅搜索該元素的文本,例如下面的代碼驗證DONATE沒有出現在頂部導航部分。

    if (!wd.FindElement(By.CssSelector("nav")).Text.Contains("DONATE")) 
    
+0

喜傑夫,非常感謝您的回答和建議。你的解決方案工作正常這些只是我使用硒的早期日子。說過我認爲其中一些覆蓋圖的右上角沒有X.而且,用戶可以自由地以儘可能快的方便方式解除覆蓋。我有點想知道是否有解決最初的問題,只需點擊覆蓋層透明度的一部分來消除覆蓋層。 – olusegun

+0

當您告訴Selenium單擊一個元素時,它將單擊該元素的中心。當元素是瀏覽器窗口的大小,並且中心通常是彈出窗口的位置時,您需要「幫助」Selenium點擊您想要的位置。您可以使用具有偏移量的「Actions」和「MoveToElement」來執行此操作,並單擊屏幕上的任意位置,但必須根據要點擊的位置進行一些計算,以避免單擊屏幕或瀏覽器。 – JeffC

+0

累積獎金。非常感謝這位兄弟。 – olusegun