可以使用SeleniumWebDriver生成通用函数来查找特定项

本文关键字:查找 SeleniumWebDriver 可以使 函数 | 更新日期: 2023-09-27 18:29:58

我想制作一个通用函数来查找特定项吗?

我做这个C#代码(Src:在Selenium WebDriver中正确使用显式等待)

        IWebDriver driver = new FirefoxDriver();
        driver.Url = "http://somedomain/url_that_delays_loading";
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
        {
            try
            {
                return d.FindElement(By.Id("someDynamicElement"));
            }
            catch
            {
                return null;
            }
        });

我会代替等待。直到(….);使用泛型函数。

如何识别一个通用的By选择器来查找特定项目?

以下是内置Selenium2选择器的列表:

ClassName
CssSelector
Id
LinkText
PartialLinkText
Name
TagName
XPath

例如:

IWebElement myDynamicElement = WaitForElement(????) // for exemple By.TagName = "Test"
public static IWebElement WaitForElement(**By selector**)
{
    wait.Until<IWebElement>((d) =>
    {
            try
            {
                return d.FindElement(**By selector**);
            }
            catch
            {
                return null;
            }
    });
}

可以使用SeleniumWebDriver生成通用函数来查找特定项

public static IWebElement WaitForElement(IWebDriver driver, By selector)
{    
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10);
    return wait.Until<IWebElement>(d =>
    {
            try
            {
                return d.FindElement(selector);
            }
            catch
            {
                return null;
            }
    });
}

这将被称为

WaitForElement(driver, By.Id("someDynamicElement"));

您只需给它一个By选择器的实例。然后,底层的d.FindElement调用将处理其余部分,它将处理弄清楚它是什么样的选择器。您不需要做太多。

By类背后的整个概念首先是使其具有通用性。你将重复工作。

您还必须传入driver,除非您计划将其作为static字段或driver本身的扩展方法。