菜鸟学selenium webdriver - 2

来源:互联网 发布:录视频美颜软件 编辑:程序博客网 时间:2024/05/21 10:47

上一篇文章末写到对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搜索对象元素时,默认让它等待的时间。


由于只是初学阶段,现在只能很简单的介绍这两种等待方式,至于他们的优劣势,只有等在以后的实践中才能有一个更加充分的阐述。

原创粉丝点击