1

这里是我的开发环境的详细信息:C# - 硒与Chrome的测试:元素不是在点点击其他元素将收到点击

的Visual Studio 2012旗舰版与更新4 谷歌的Chrome版本38.0.2125.111米 Windows 7专业版32位操作系统 编码UITest生成器11.0.60315.1

我们的软件团队正在开发一个ASP.NET Web应用程序,并得到了客户的要求,我们使用Microsoft Visual Studio 2012与微软CodedUI运行自动化测试。

我跑了我们在谷歌的Chrome版本38.0.2125.111米ASP.NET应用程序

我下载并安装了“编码的UI跨浏览器测试硒组件”

而且,我已经添加了硒DLL到我的Microsoft Visual Studio 2012 CodedUI项目。

IWebDriver driver = new ChromeDriver(@"D:\blabblahblah\SeleniumConfigFiles\"); 
driver.Navigate().GoToUrl("http://localhost:2816/"); 
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00)); 
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return  document.readyState").Equals("complete")); 
wait.Until(drv => drv.FindElement(By.LinkText("System"))); 
var btn = driver.FindElement(By.LinkText("System")); 
btn.Click(); 

不幸的是,在最后一行代码总是产生以下错误:

System.InvalidOperationException was unhandled by user code 
    HResult=-2146233079 
    Message=unknown error: Element is not clickable at point (163, 36). Other element would  receive the click: <div class="loading-screen">...</div> 
    (Session info: chrome=38.0.2125.111) 
    (Driver info: chromedriver=2.8.241075,platform=Windows NT 6.1 SP1 x86) 
    Source=WebDriver 
    StackTrace: 
     at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)  in  c:\Projects\WebDriver\trunk\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 1012 
     at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute,  Dictionary`2 parameters) in   c:\Projects\WebDriver\trunk\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 846 
     at OpenQA.Selenium.Remote.RemoteWebDriver.InternalExecute(String driverCommandToExecute, Dictionary`2 parameters) in  c:\Projects\WebDriver\trunk\dotnet\src\webdriver\Remote\RemoteWebDriver.cs:line 729 
     at OpenQA.Selenium.Remote.RemoteWebElement.Execute(String commandToExecute,  Dictionary`2 parameters) in c:\Projects\WebDriver\trunk\dotnet\src\webdriver\Remote\RemoteWebElement.cs:line 810 
      at OpenQA.Selenium.Remote.RemoteWebElement.Click() in  c:\Projects\WebDriver\trunk\dotnet\src\webdriver\Remote\RemoteWebElement.cs:line 336 
      at JigsawCUITChrome.UIMap.RecordedMethod1() in  d:\blahblahUIMap.Designer.cs:line 55 
    at JigsawCUITChrome.CodedUITest1.CodedUITestMethod1() in d:\blahblah\CodedUITest1.cs:line 31 

的InnerException:

你能告诉我怎样才能解决上述错误?

+0

这是一个非常低效的解决方案,只是导航到该网页driver.Navigate()GoToUrl后( “HTTP://本地主机:2816 /”)。我添加了一个Thread.Sleep(90000);它仍然需要太长时间。无论如何有一个更有效的解决方案?提前致谢。 – 2014-11-06 07:47:41

+0

它说有另一个控制阻止'btn',即div“加载屏幕”。检查模式或其他控件,并尽可能使用ID或ClassName属性进行搜索,因为它更快一些。 – 2014-11-06 13:48:18

+0

这个问题在http://stackoverflow.com/questions/28094589/can-selenium-detect-whether-clickable-elements-are-being-covered-up-by-other-ele/想抛出这个异常,你'重新陷入。你知道这个异常是来自CodedUI,Selenium还是你自己定制的? – 2015-01-28 18:42:12

回答

2

而不是做一个盲目的等待,你可以等待锁止件离开

硒没有内置的存在属性或方法,但你可以很容易地使一个。

public static bool Exists(IWebDriver driver, By locator) 
{ 
    try 
    { 
     driver.FindElement(locator); 
     return true; 
    } 
    catch (NoSuchElementException) { return false; } 
} 

IWebDriver driver = new ChromeDriver(@"D:\blabblahblah\SeleniumConfigFiles\"); 
driver.Navigate().GoToUrl("http://localhost:2816/"); 
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00)); 
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return  document.readyState").Equals("complete")); 
wait.Until(drv => drv.FindElement(By.LinkText("System"))); 
wait.Until(drv => ! Exists(drv, By.CssSelector("div.loading-screen"); // Added wait here for the loading element to go away 
var btn = driver.FindElement(By.LinkText("System")); 
btn.Click(); 
0

我在使用chrome驱动程序时也遇到了同样的问题我尝试了几种适用于我的方案。

下面是我试过

它主要发生在Chrome浏览器,所以如果你是大多与Firefox或IE浏览器的工作,那么你将不会得到此异常的解决方案。 Chrome浏览器不会计算元素的确切位置。 Chrome总是在元素的中间点击。 由于同步问题,有时您也会得到此异常。

http://learn-automation.com/how-to-solve-element-is-not-clickable-at-pointxy-in-selenium/

+0

请避免张贴链接,而是引用页面中的相关信息 - 从现在开始的一年内,该链接可能不再有效。 – 2015-05-24 14:43:47