如何使用selenium c#检测Web元素的更改?

时间:2017-08-19 15:50:18

标签: c# selenium xpath webdriver

我试着找到一种在下面操作的正确方法:

IWebElement content = driver.FindElementByXPath( myXPath );

while(true)
{
    if ( !content.Text.Equals ( driver.FindElementByXPath ( myXPath ).Text ) )
    {
            content = driver.FindElementByXPath ( myXPath );
            Console.WriteLine ( content.Text );
    }
}

我的代码在内容更改时在myXPath上打印内容。但显然,这不是一种有效的方式。有没有适当的方法来监听XPath位置的变化?

1 个答案:

答案 0 :(得分:1)

您的while循环占用了大部分CPU使用量 一个小小的改变可以显着提升你的表现。

startActivity()

我建议采用以下方法:

    while(true)
{
    if ( !content.Text.Equals ( driver.FindElementByXPath ( myXPath ).Text ) )
    {
            content = driver.FindElementByXPath ( myXPath );
            Console.WriteLine ( content.Text );
            Thread.Sleep(1); //add this code
    }
}

在你的情况下。 get方法用作采样器,cond变量是你的显式文本

所以现在你可以使用:

    public bool StopWatchLoop<T>(Func<string, T> getMethod, string getData, T cond) where T : new()
    {
        var i = getMethod(getData);
        var sw = new Stopwatch();
        sw.Start();
        while (Compare(i, cond) && sw.Elapsed < TimeSpan.FromSeconds(120))
        {
            i = getMethod(getData);
            Thread.Sleep(50);
        }
        Trace.WriteLine($"Expected: {cond.ToString()} actual {i} - data: {getData}");
        return (Compare(i, cond)) ? true : false;
    }

    private bool Compare<T>(T x, T y)
    {
        return EqualityComparer<T>.Default.Equals(x, y);
    }

上面的代码对元素进行采样,最长时间为120秒,因为while(true)是不好的做法。