2017-08-19 13 views
1

私は操作の下に行うための適切な方法を探してみてください:セレンC#でWeb要素の変更を検出するにはどうすればよいですか?

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

あなたのwhileループはCPU使用量の大部分を占めます。 小さな変更はパフォーマンスを大幅に向上させます。あなたのケースでは

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); 
    } 

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

は、私は次の方法をお勧めします。

StopWatchLoop<string>(getElementText, myXpath, Content.Text); 

をサンプル上のコード要素120秒の最大時間中(真)があるので、:サンプラーと指揮変数として使用getメソッドは、今あなたが使用することができますexpcedテキスト

です悪い習慣。

関連する問題