在Selenium中传递点击条件

时间:2018-03-24 18:08:12

标签: c# selenium-webdriver selenium-chromedriver

我看到有人编写过一行这样的代码,它基本上通过传递webdriver,一些布尔条件的软件和一个等待条件得到满足的Timespan来解决硒点击的条件。它看起来像这样:

{{1}}

我想知道的是如何构建相同的方法。如何构建这样的自定义驱动程序单击方法?请帮忙。 C#的新手可以有人分享一些示例代码吗?

1 个答案:

答案 0 :(得分:0)

为了实现这样的方法,首先需要理解几个概念。我不会解释所有这些并要求你搜索和阅读。

  1. 硒中的明确等待 - Explicit Waits。将C#切换为首选语言。
  2. C#中的扩展方法
  3. C#Func delegate
  4. 中的Func委托

    这是一个带有略微修改的签名的示例实现,即此实现不需要By.Xpath / By.Id等作为第一个参数:

    using OpenQA.Selenium;
    using OpenQA.Selenium.Support.UI;
    using System;
    
    namespace SeleniumWebAutomation
    {
        public class WebElementWait : DefaultWait<IWebElement>
        {       
            public WebElementWait(IWebElement element, TimeSpan timeout) : base(element, new SystemClock())
            {
                this.Timeout = timeout;
                this.IgnoreExceptionTypes(typeof(NotFoundException));
            }
        }
    
        public static class WebDriverExtension
        {
            public static void WaitAndClick(this IWebDriver driver, Func<IWebDriver,IWebElement> condition,TimeSpan timeSpan)
            {
                IWebElement webElement = new WebDriverWait(driver, timeSpan).Until(condition);
                webElement.Click();
            }
        }
    }
    

    您现在可以调用它,如下所示:

     //Wait for element to exist for up to 10 second before performing click operation
        driver.WaitAndClick(ExpectedConditions.ElementExists(By.XPath("xpath value")),TimeSpan.FromMilliseconds(10000));
    
     //Wait for element to be visible for up to 5 second before performing click operation   
         driver.WaitAndClick(ExpectedConditions.ElementIsVisible(By.Id("Id")),TimeSpan.FromMilliseconds(5000));
    

    请注意,我使用了内置帮助程序类 ExpectedConditions 它有几个方法,如ElementExists(),ElementIsVisible()等。给定位器返回一个Func。如果在指定的超时内提供的示例中未分别找到/不显示元素,则将抛出异常。

    此致 Nish26