2017-08-08 56 views
1

我的標籤文本已從MQL更改爲SQL值。Selenium方法WaitUntilTextToBePreInInElement失敗

<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> 

我需要等到標籤包含'SQL'值。

如果我使用Selenium本地wait方法我的測試在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

爲什麼硒方法不會在這種情況下工作嗎?

+0

你是什麼意思?它會拋出'NoSuchElementException'或'TimedoutException'嗎? –

+0

它引發「30秒後超時」異常 – algot

+1

整個元素是否可能被銷燬和重新創建?通過你的測試,添加一個變量來獲取循環前的元素,只需抓取文本,而不是每次都獲取新的元素。這將告訴你,如果你得到一個新的元素或不。 – CodingKuma

回答

0

好吧既然你確定包含的元素被破壞並重新創建我可以更好的幫助。您應該只能使用「TextToBePresentInElementLocated」。這需要一個By對象而不是元素本身。

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

由於@CodingKuma建議窗體在值更新期間刷新,元素從DOM中消失。 所以它需要等到元素停止後再等待元素出現。

+0

我添加了一個知道這個新信息的答案。 – CodingKuma

0

這個怎麼樣

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