以下是我的开发环境的详细信息:
使用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:
您能否告诉我如何解决上述错误?
答案 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/