3

私はこれを持っています:

public static void ByLinkText(string text)
{
    for (var i = 0; i < 50; i++)
    {
        try
        {
            Setup.Driver.FindElement(By.LinkText(text)).Click();
            return;
        }
        catch (Exception)
        {
        }
    }
}

(真ん中の変なコードはセレンです - スキップしましょう、ここではそうではありません)

さて、私はこのByLinkText()メソッドを持っていますが、ここには表示されていませんが、この中間のものが正しく実行されるまでこのメソッドを無限に繰り返し、その後にヒットするということreturnです。

では、この中間コードが正しく実行されていません。その理由を知りたいのですが、何をしているのでしょうか? catch セクションにブレークポイントを配置しました。何が起こっている?何もありません (ByLinkText()それでも無限に進み続けます!)。

さて、あなたは私に「やあ、その中間コードは何もスローしていないだけだ!」と言うでしょう.証明 2 )。

最後に、これはどういうことですか?ブレークポイントについて。その上にブレークポイントを配置するとすぐにreturn(魔法のコードの直後に!)、そのコードは適切に実行されます! プログラムの世界では、どのようにブレークポイントがアプリケーションを修復することが可能なのでしょうか!?

4

4 に答える 4

2

ブレークポイントによってアプリケーションが動作する場合、コードにタイミングの問題がある可能性があります。ブレークポイントで停止するたびに、停止によって遅延が発生し、他の処理がエラーなしで進行する可能性があります。

Thread.Sleep(N);これが、あちこちでコードにスローされることがある理由です。それはコーダーが腕を上げて「わからない。そこにスリープを入れてください」と言っています。

実際に試してみてください。Thread.Sleep(3000); を入れます。ブレークポイントがどこに行き、何が起こるかを見てください。これが解決策になることは決してお勧めしませんが、理論の良いテストになる可能性があります.

于 2013-03-16T23:21:09.470 に答える
0

ここで車輪を再発明しています。Selenium はこの方法を実行できます。

http://selenium.googlecode.com/git/docs/api/dotnet/html/AllMembers_T_OpenQA_Selenium_Support_UI_WebDriverWait.htm

于 2013-03-18T13:21:35.507 に答える