如何使用运行时更改的WebElement?

拉纳

我得到了他的代码,直到找到控件为止

WebDriverWait wait = new WebDriverWait(Browser, TimeSpan.FromSeconds(20));
var ok = wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("(//button[@id='btnOkDialog'])[" + buttonOccuranceNo + "]")));

在发生任何事件后在dom中进行某些控制时,我将使用此功能。

现在,如果我缩小页面的搜索范围[就像在WebDriver内将div作为WebElement一样],那么如何搜索该范围内的任何控件,直到找到或超时?

Moshisho

您需要使用DefaultWait该类来设置其他等待

var waitInnerScope = new DefaultWait<IWebElement>(divInsideWebDriver);
waitInnerScope.Timeout = TimeSpan.FromSeconds(timeout);
waitInnerScope.IgnoreExceptionTypes(typeof(NoSuchElementException));

然后使用wait.Until

var ok = waitInnerScope.Until(PresenceOfAllElementsLocatedBy(By.XPath("(//button[@id='btnOkDialog'])[" + buttonOccuranceNo + "]")));

编辑:由于ExpectedConditions包含实现Func<IWebDriver, ...>与结合使用的静态方法WebDriverWait,因此您必须使用自己的方法,其用法IWebElement如下:

public static Func<IWebElement, ReadOnlyCollection<IWebElement>> PresenceOfAllElementsLocatedBy(By locator)
{
    return (element) =>
    {
        try
        {
            var elements = element.FindElements(locator);
            return elements.Any() ? elements : null;
        }
        catch (StaleElementReferenceException)
        {
            return null;
        }
    };
}

或者,您可以将lambda表达式用于匿名方法,如下所示:

waitInnerScope.Until<ReadOnlyCollection<IWebElement>>((element) => 
{
    try
    {
        var elements = element.FindElements(By.XPath("(//button[@id='btnOkDialog'])[" + buttonOccuranceNo + "]"));
        return elements.Any() ? elements : null;
    }
    catch (StaleElementReferenceException)
    {
        return null;
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Gunicorn运行时如何在运行时更改flask配置变量

运行时如何更改LightGBM参数?

应用运行时如何更改NavigationBarColor

如何动态更改progressbarjs运行时

如何使用boost :: multiprecision在运行时更改数字精度

如何使用 Gramex FormHandler 动态(在运行时)创建或更改数据库模式

如何使用可在运行时更改的变量定义别名?

如何使用 setDoubleValue() 在 Omnet++ 中更改参数运行时

如何在运行时使用Appcelerator更改语言应用

我如何在Selenium中使用chrome在运行时动态更改下载路径

如何在运行时使用反射更改方法的实现?

如何使用javascript更改元素css类运行时

从代码运行时,如何使用我对 .po 文件所做的更改来更新 ODOO

如何在运行时使用C#更改文本框/组合框字体

如何使用简单的注入器在运行时更改依赖项

使用.htaccess,如何在运行时更改文件扩展名

如何在运行时使用 style.xml 更改活动的主题

如何更改ngx-leaflet上的坐标运行时?

如何更改Open Liberty运行时语言?

如何在运行时更改TimerTask的执行周期?

如何在运行时更改NLog规则目标?

如何在运行时更改实现

如何在运行时更改按钮形状样式?

如何在Android运行时更改当前主题

如何在Spring的运行时更改属性值

服务运行时如何更改状态栏图标

如何在运行时更改TextView的样式

Flutter:如何在运行时更改MaterialApp主题

如何在openscenegraph上的运行时更改背景