C#和断点 - 我们这里有魔术师吗?

时间:2013-03-16 23:16:06

标签: c# selenium

我有这个:

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

(中间的奇怪代码是selenium - 让我们跳过它,这不是这里的情况)

好的,所以我有这个ByLinkText()方法,你在这里看不到的是,我无限地重复这个方法,直到这个中间的东西正确执行然后点击return之后。 / p>

所以:这个中间代码没有正确执行,我想知道为什么,所以我在做什么?我在catch部分放了一个断点。怎么了?什么都没有(ByLinkText()仍然继续无限!)。

现在,你会告诉我“嘿!那个中间代码不是扔东西!”但是哦,甜蜜的祝福......那个中间代码可以做两件事:要么向我扔东西,要么像它应该做的那样(prove1prove2)。

最后,这是怎么回事?关于断点。一旦我将断点放在return(在魔法代码之后!)代码执行正确!在程序化世界中如何可能,断点修复我的应用程序!?

4 个答案:

答案 0 :(得分:2)

当断点使您的应用程序运行时,这意味着您的代码可能存在计时问题。每当您在断点处停止时,停止会引入延迟,可能会让其他处理继续进行而不会出现错误。

这就是为什么有时会在这里和那里看到Thread.Sleep(N);抛出代码的原因。那是一个编码员甩开他的手臂说“我不知道。只是在那里睡觉。”

事实上,试一试。放一个Thread.Sleep(3000);断点发生的地方,看看会发生什么。我不建议这是解决方案,但它可能是对理论的一个很好的测试。

答案 1 :(得分:2)

我认为这与硒的关系比你想象的要多。看看隐式和显式等待查找元素。

http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

要尝试的另一件事是将IWebElement结果保存到temp var中,放入小睡眠然后单击它。有时浏览器ui无法像selenium一样快地处理命令。

var el = Setup.Driver.FindElement(By.LinkText(text));
Thread.Sleep(750);
el.Click();

答案 2 :(得分:0)

尝试添加对System.Diagnostics.Debugger.Break()的调用。或者将exception.ToString()结果写入控制台。

答案 3 :(得分:0)