2016-10-12 24 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