所以我开始使用这个很棒的功能:
[FindsBy(How = How.CssSelector, Using = "div.location:nth-child(1) > div:nth-child(3)")]
public IWebElement FirstLocationTile { get; set; }
但问题是它似乎在我的 WebDriverWait 代码中不起作用!
具体示例,我无法重复使用我的 FirstLocationTile。它坚持要有一个 By.:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(BaseTest.defaultSeleniumWait));
wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("div.location:nth-child(1) > div:nth-child(3)")));
有什么想法吗?
最佳答案
如果使用 ExpectedConditions,则只能通过定位器来识别,因为 ExpectedConditions 只接受定位器作为参数。
但是,ExpectedConditions 并不是您可以在 wait.until() 中使用的唯一参数。您可以改为在 lambda 表达式中使用您的元素。
^ C#、Python 和其他语言也是如此。
An example lambda expression use can be found in the C# documentation ,下面是您要实现的目标的示例:
wait.Until(FirstLocationTile => FirstLocationTile.Displayed && FirstLocationTile.Enabled);
我使用 Displayed 和 Enabled 作为示例,因为元素没有 Visible 属性 in the C# documentation .
关于c# - 有没有办法在 Selenium 的 C# 端口中使用 WebDriverWait 的 FindsBy 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576305/