Selenium Wait Until 使用 Element 而不是 By
Selenium Wait Until using Element rather the By
下午,
我需要一点建议。例如,我有页面对象设置
IWebElement SiteInUse => DriverContext.Driver.FindElement(By.ClassName("site-txt"));
我有一个方法可以设置
1. 等到元素可见。
2. 检查元素文本是否正确。
我正在尝试做类似
的事情
WaitHelpers.WaitTillVisiible(By.ClassName("site-txt"));
好像 ID 发生了变化,我需要在两个地方对其进行编辑。我正在尝试为 IWebElement 创建一个扩展方法。
我试过了
ublic static bool WaitUntilElementIsVisible(this IWebElement element)
{
WebDriverWait wait = new WebDriverWait(DriverContext.Driver, TimeSpan.FromSeconds(30));
return wait.Until(ElementIsVisible(element));
}
public static Func<IWebDriver, bool> ElementIsVisible(IWebElement element)
{
return (driver) =>
{
try
{
return element.Displayed;
}
catch (Exception)
{
// If element is null, stale or if it cannot be located
return false;
}
这有效,但前提是元素可见但不会继续寻找 30 秒。
我做错了什么?
鉴于最初的问题,我将尝试回答,该问题需要测试可见性,但这需要您在两个地方更新定位器。
答案非常简单:为定位器定义一个实例字段:
public class SomePageModel
{
By siteInUseLocator = By.ClassName("site-txt");
IWebElement SiteInUse => DriverContext.Driver.FindElement(siteInUseLocator);
...
}
稍后您可以重复使用此字段来测试可见性:
WaitHelpers.WaitTillVisiible(siteInUseLocator);
下午,
我需要一点建议。例如,我有页面对象设置
IWebElement SiteInUse => DriverContext.Driver.FindElement(By.ClassName("site-txt"));
我有一个方法可以设置 1. 等到元素可见。 2. 检查元素文本是否正确。
我正在尝试做类似
的事情WaitHelpers.WaitTillVisiible(By.ClassName("site-txt"));
好像 ID 发生了变化,我需要在两个地方对其进行编辑。我正在尝试为 IWebElement 创建一个扩展方法。
我试过了
ublic static bool WaitUntilElementIsVisible(this IWebElement element)
{
WebDriverWait wait = new WebDriverWait(DriverContext.Driver, TimeSpan.FromSeconds(30));
return wait.Until(ElementIsVisible(element));
}
public static Func<IWebDriver, bool> ElementIsVisible(IWebElement element)
{
return (driver) =>
{
try
{
return element.Displayed;
}
catch (Exception)
{
// If element is null, stale or if it cannot be located
return false;
}
这有效,但前提是元素可见但不会继续寻找 30 秒。
我做错了什么?
鉴于最初的问题,我将尝试回答,该问题需要测试可见性,但这需要您在两个地方更新定位器。
答案非常简单:为定位器定义一个实例字段:
public class SomePageModel
{
By siteInUseLocator = By.ClassName("site-txt");
IWebElement SiteInUse => DriverContext.Driver.FindElement(siteInUseLocator);
...
}
稍后您可以重复使用此字段来测试可见性:
WaitHelpers.WaitTillVisiible(siteInUseLocator);