以下是我的开发环境的详细信息:
-Visual Studio 2012 Ultimate with Update 4
-Google Chrome版本38.0.2125.111 m
-Windows 7 Professional with 32-bit Operating System
-Selenium .NET 2.44.0
-NUnit
借助Selenium 2.44.0的Firefox驱动程序,自动化UI可以快速,正常地运行。此外,我没有使用任何Thread.Sleep与使用Selenium 2.44.0的Firefox驱动程序的C#代码
使用Selenium 2.44.0的Firefox驱动程序的示例C#代码
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)drvArg).ExecuteScript("return document.readyState").Equals("complete"));
String find1stLnkXpath = "//div[@class='jarviswidget jarviswidget-sortable']/descendant::div[@role='content']/descendant::div[@id='grid-container']/descendant::table[@class='k-selectable' and @role='grid']/tbody/tr[1]/td/descendant::a[@class='k-button k-button-icontext k-grid-view']";
Thread.Sleep(threadSleepTimeArg);
wait.Until(drv => (true == Exists(drv, By.XPath(find1stLnkXpath))));
wait.Until(drv => isClickable(drv, By.XPath(find1stLnkXpath)));
wait.Until(drv => (true == Exists(drv, By.XPath(find1stLnkXpath))));
// k-button k-button-icontext k-grid-view
// class="k-selectable" role="grid"
IWebElement viewCustDetlnk = wait.Until(ElementIsClickable(By.XPath(find1stLnkXpath)));
viewCustDetlnk.Click();
可悲的是,Selenium 2.44.0的Chrome驱动程序(Chromedriver Win32 2.12)运行缓慢,我被迫使用Thread.Sleep和使用Selenium 2.44.0 Chrome驱动程序的C#代码,以确保自动化UI工作正常。
使用Selenium 2.44.0的Chrome驱动程序(Chromedriver Win32 2.12)的示例C#代码
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)drvArg).ExecuteScript("return document.readyState").Equals("complete"));
String find1stLnkXpath = "//div[@class='jarviswidget jarviswidget-sortable']/descendant::div[@role='content']/descendant::div[@id='grid-container']/descendant::table[@class='k-selectable' and @role='grid']/tbody/tr[1]/td/descendant::a[@class='k-button k-button-icontext k-grid-view']";
Thread.Sleep(3000);
wait.Until(drv => (true == Exists(drv, By.XPath(find1stLnkXpath))));
wait.Until(drv => isClickable(drv, By.XPath(find1stLnkXpath)));
wait.Until(drv => (true == Exists(drv, By.XPath(find1stLnkXpath))));
IWebElement viewCustDetlnk = wait.Until(ElementIsClickable(By.XPath(find1stLnkXpath)));
viewCustDetlnk.Click();
请告诉我如何修改Selenium 2.44.0的Chrome驱动程序(Chromedriver Win32 2.12)的代码,以便我可以避免使用Thread.Sleep
答案 0 :(得分:0)
在我们的应用程序的GUI中,我们有一个div html元素,表现为一个看不见的加载屏幕,我们需要等待它不再存在 在我们点击按钮之前。 对于使用Selenium 2.44.0的Firefox驱动程序的测试代码,Wait对象可以等到看不见的 加载屏幕在代码尝试查找按钮对象之前不再存在。
奇怪的是,使用Selenium 2.44.0的Chrome驱动程序(Chromedriver Win32 2.12)的测试代码需要使用Wait对象等到看不见的 加载屏幕在我的代码尝试甚至单击按钮对象之前不存在:
wait.Until(drv => ! Exists(drv, By.CssSelector("div.loading-screen");
btn.Click();
Selenium 2.44.0的Chrome驱动程序(Chromedriver Win32 2.12)似乎仍有一些小问题。