我试着找到一种在下面操作的正确方法:
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位置的变化?
答案 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)是不好的做法。