可以使用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;
}
});
}
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
本身的扩展方法。