上一篇文章末写到对startswith函数中参数Cheese和cheese的结果表示奇怪,结果才发现,google不同的地址搜索出结果后,title是不一样的。比如www.google.com.hk 中搜索Cheese,title保持一致,而在www.google.es 中搜索Cheese,title变为cheese。
这是个很小的问题,但是值得注意的地方是,网页测试中,如果验证页面某些文字时,一定要注意到页面上文字的正常显示字符,以及期望的显示字符是否一致。
今天看了一下显示等待explicit wait 和 隐式等待 implicit wait。我们都知道不管是在网页测试还是在其他应用程序测试中,等待程序的变化都是一个很重要的测试步骤。比如说在网页测试中,打开某网页,或者在页面上操作,等待系统的回应,如果是手工测试,那么我们大脑很容易的就判断出是否需要等待,什么时候可以执行下一步操作。但是在自动化测试中,我们只得通过代码来完成等待工作,所以合适的waiting code是对测试的继续执行起着非常重要的作用。
在我以往的一些C#程序中,经常以thread.sleep或者联合其他的条件来做等待工作,在Webdriver中,有一个非常方便的等待机制,两个专门的类 WebDriverWait 以及 ExpectedCondition,这两个类联合使用,可以非常方便和有效的控制测试程序的等待时间,这是显示等待。还可以通过对implicitwait 函数的调用,使用隐式等待方式。
显示等待 Explicit Wait
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Support.UI;
namespace EXIMplicitWaitTest
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("www.baidu.com");
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myTestElement = wait.Until<IWebElement>((d) => { return d.FindElement(By.Id("su")); });
System.Console.Read();
}
}
}
本程序中,wait.unti() 中的返回查询结果语句,就是我们的expected condition。在java中比较方便,已经定义好了相应的ExpectedConditions类,可以直接调用即可。
在定义wait 的时候,我们给出了超时限制10秒,表示如果在10秒钟都没有满足expected condition,那么就返回time out 异常。在显示等待机制中,默认每500毫秒会自动检测一次是否满足expected condition,直到它返回正确值或者超时。
隐式等待 Implicit Wait
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Support.UI;
namespace EXIMplicitWaitTest
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
driver.Navigate().GoToUrl("www.baidu.com");
IWebElement myDynamicElement = driver.FindElement(By.Id("su"));
System.Console.Read();
}
}
}
在implicit wait 中,并没有使用WebDriverWait类,而是使用了webdriver中的一个函数ImplicitWait,这个函数定义了,在driver搜索对象元素时,默认让它等待的时间。
由于只是初学阶段,现在只能很简单的介绍这两种等待方式,至于他们的优劣势,只有等在以后的实践中才能有一个更加充分的阐述。