我的标签文字已从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方法在这种情况下不起作用?
答案 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"));