所以我开始使用这个很棒的功能:
[FindsBy(How = How.CssSelector, Using = "div.location:nth-child(1) > div:nth-child(3)")]
public IWebElement FirstLocationTile { get; set; }
Run Code Online (Sandbox Code Playgroud)
但问题是它似乎不适用于我的WebDriverWait代码!
具体的例子,我不能重复使用我的FirstLocationTile.它坚持要有一个:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(BaseTest.defaultSeleniumWait));
wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div.location:nth-child(1) > div:nth-child(3)")));
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
如果使用 ExpectedConditions,则只能通过定位器进行标识,因为 ExpectedConditions 只接受定位器作为参数。
但是,ExpectedConditions 并不是 wait.until() 中可以使用的唯一参数。您可以在 lambda 表达式中使用您的元素。
^ 对于 C#、Python 和其他语言来说也是如此。
可以在 C# 文档中找到 lambda 表达式使用示例,下面是您想要实现的目标的示例:
wait.Until(FirstLocationTile => FirstLocationTile.Displayed && FirstLocationTile.Enabled);
Run Code Online (Sandbox Code Playgroud)
我使用 Displayed 和 Enabled 作为示例,因为C# 文档中的元素没有 Visible 属性。
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |