c# - WebDriverWait 可以用在已经定义的元素上吗?
问题描述
我正在构建一个自动化框架,它使用页面对象模型(POM)并有一个名为 HomePage 的类文件。
我已经使用以下方法声明了元素:
[FindsBy(How = How.Id, Using = "TextField1")]
private IWebElement FirstTextField{ get; set; }
我已将我的 WebDriverWait 声明如下:
WebDriverWait wait = new WebDriverWait(driver,TimeSpan.FromSeconds(30));
我在 HomePage.cs 中有一个名为 Validate() 的方法,在此我想使用 WebDriverWait,如下所示:
wait.Until(ExpectedConditions.ElementIsVisible(FirstTextField))
如何以这种方式使用 WebDriverWait,而不必使用 By 定位器:
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("TextField1")));
解决方案
ExpectedConditions.ElementIsVisible()
IWebElement
在 C# ExpectedConditions中没有重载。您可以使用自定义实现
public static Func<IWebDriver, IWebElement> ElementIsVisible(IWebElement element)
{
return (driver) =>
{
try
{
return return element.Displayed ? element : null;
}
catch (StaleElementReferenceException)
{
return null;
}
};
}
用途:
wait.Until(ElementIsVisible(FirstTextField));
推荐阅读
- c# - 如何使用 c# 连接到我的 MySql 数据库?
- css - :not() 选择器的正确用法
- logging - JBoss/Wildfly - 安全高效的日志过滤 - 多个处理程序记录到同一个文件
- java - 我想使用杰克逊库将嵌套在另一个对象中的 json 对象映射到 POJO
- jenkins - 如何通过 Jenkins 更新 JIRA 中的问题状态?
- ios - 使用 Firebase 跟踪用户在我的 iOS 应用中所做操作的最佳方式
- python-3.x - 属性错误:
python 中的 .Senton 错误 - Outlook - php - PHP Laravel 5.8 Auth Attempt 在 PHP 72 中总是返回 false
- python - Python 3 os.rename 将重命名文件,但不重命名文件夹
- python - 如何使用相同的代码读取多个文档?