C# - 使用Chrome测试的Selenium:元素在点处无法点击其他元素将收到点击

时间:2014-11-06 07:18:59

标签: c# google-chrome selenium coded-ui-tests selenium-chromedriver

以下是我的开发环境的详细信息:

使用Update 4的Visual Studio 2012 Ultimate 谷歌浏览器版本38.0.2125.111米 带有32位操作系统的Windows 7 Professional 编码的UITest Builder 11.0.60315.1

我们的软件团队正在创建一个ASP.NET Web应用程序,客户已要求我们使用Microsoft Visual Studio 2012和Microsoft CodedUI来运行自动化测试。

我在Google Chrome版本38.0.2125.111 m

中运行我们的ASP.NET应用程序

我为Coded UI跨浏览器测试下载并安装了#34; Selenium组件"

另外,我已将Selenium 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:

您能否告诉我如何解决上述错误?

2 个答案:

答案 0 :(得分:2)

您可以等待阻止元素消失

,而不是盲目等待

Selenium没有内置的属性或方法,但您可以轻松制作一个。

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();

答案 1 :(得分:0)

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

以下是我尝试的解决方案

它主要发生在Chrome中,因此如果您主要使用Firefox或IE,那么您将无法获得此异常。 Chrome无法计算元素的确切位置 Chrome始终会在“元素”中间单击。 有些时候,由于同步问题,你也会得到这个例外。

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