Selenium方法WaitUntilTextToBePresentInElement失败

时间:2017-08-08 13:18:37

标签: c# selenium automated-tests

我的标签文字已从MQL更改为SQL值。

<label for="stage_label" id="Stage_label"><div class="ms-crm-div-NotVisible">Stage SQL</div>SQL<div class="ms-crm-Inline-GradientMask"></div></label>

我需要等到标签包含&#39; SQL&#39;值。

如果我使用Selenium本机等待方法,我的测试会在30秒内因TimedoutException

而失败
    var wait = new WebDriverWait(driver, TimeSpan.FromMilliseconds(30000));
    wait.Until(ExpectedConditions.TextToBePresentInElement(driver.FindElement(
    By.Id("Stage_label")), "SQL"));

同时,如果我尝试调试并检查元素文本,它会在等待一段时间后成功返回SQL

       for (int i = 0; i < 5; i++)
       {
         Console.WriteLine(driver.FindElement(
         By.Id("Stage_label")).Text);
         Thread.Sleep(100);
       }

MQL MQL MQL SQL SQL

为什么Selenium方法在这种情况下不起作用?

3 个答案:

答案 0 :(得分:1)

好的,既然你确认了包含元素被销毁并重新创建,我可以提供更好的帮助。你应该能够使用&#34; TextToBePresentInElementLocated&#34;代替。这需要一个By对象而不是元素本身。

var wait = new WebDriverWait(driver, TimeSpan.FromMilliseconds(30000));
wait.Until(ExpectedConditions.TextToBePresentInElementLocated(By.Id("Stage_label"), "SQL"));

答案 1 :(得分:0)

由于@CodingKuma建议表单在值更新期间刷新,元素从DOM中消失。 所以它需要等待元素停止然后等待元素出现。

答案 2 :(得分:0)

这个怎么样

var wait = new WebDriverWait(driver, TimeSpan.FromMilliseconds(30000));
var element = driver.FindElement(By.Id("Stage_label"))
wait.Until(ExpectedConditions.TextToBePresentInElement(element, "SQL"));