如何在硒中进行一般等待

时间:2017-08-16 12:57:34

标签: c# selenium

我有一个关于硒等待的问题,想知道只是进行一般等待的最佳方式。

实际上,我输入一个测试栏,然后出现一个下拉列表。 HTML中的设计很糟糕,所以我需要做的是:

1:将我的文字写在

下面的测试输入中
    WebDriverWait waitAgency = new WebDriverWait(_driver, TimeSpan.FromSeconds(3));
    waitAgency.Until(ExpectedConditions.ElementToBeClickable(By.Id(_webElement["agency"])))
        .SendKeys("test agent");

2:然后我需要等待2秒,因为下拉可能需要加载该值。这是我需要帮助的。

3:我选择了' TAB'按钮,以便选择值:

 _driver.FindElement(By.Id(_webElement["agency"])).SendKeys("TAB");

我的问题是关于第2点,在选择' TAB'之前等待2秒的最佳方法是什么?按钮?我没有什么可以等到,我只想等待2秒钟。

谢谢,

5 个答案:

答案 0 :(得分:0)

如果你只是想等待2秒钟,(我认为这不是一个好习惯),你可以简单地暂停你的线程。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul></ul>

更好的是等待下拉元素可见。

答案 1 :(得分:0)

您可以使用以下内容:

public static void Wait(int miliseconds, int maxTimeOutSeconds = 60)
{
    var wait = new WebDriverWait(Driver, new TimeSpan(0, 0, 1, maxTimeOutSeconds));
    var delay = new TimeSpan(0, 0, 0, 0, miliseconds);
    var timestamp = DateTime.Now;
    wait.Until(webDriver => (DateTime.Now - timestamp) > delay);
}

详情here

答案 2 :(得分:0)

我的3个步骤分为3分,每个步骤分别为:

  1. 当您在测试输入中写入文本时,如果之前加载了该页面,那么您不需要诱导任何ExplicitWaitExplicitWait在那里毫无意义。因此,您可以删除ExplicitWait
  2. 由于您需要等待2秒才能为下拉列表加载值(通过JavaScript / AjaxCalls),因此您需要ExplicitWait。因此,当您开始使用ExplicitWaitxpath查找Dropdown元素时,请引导css
  3. 接下来,您正在通过“TAB&#39;”选择一个选项。按钮选择 not_so_perfect 方法的值。如果控件是简单的下拉列表(选择类),则可以optionsselectByIndex()selectByValue()使用selectByVisibleText()。否则,如果下拉列表(自动建议)分开divulli,请尝试选择idname或构建一个唯一的{ {1}}或xpath点击/选择一个值。

答案 3 :(得分:0)

等待硬编码2秒是不好的做法。网上有大量的信息描述了为什么,但是Thread.Sleep()或等待的等待,而不是一个事件,但在固定的时间都属于该类别。

对于第2步,为什么不等到您要查找的元素可点击?如果它是一个autosuggest列表或类似的东西,将构建列表的HTML,以便您可以等待您想要点击的元素,然后只需单击它(而不是使用TAB)。

答案 4 :(得分:0)

您可以设置ImpicitWait。默认情况下,ImplicitWait设置为0毫秒。将其更改为您希望等待的时间。

_driver.GetDriver().Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);