[英]isDisplayed always returns false for the specific element
我正在使用Selenium來檢查用戶發送帶有空字段的表單時是否顯示錯誤消息。 錯誤消息塊始終附加在DOM上,但是當沒有錯誤時,它會顯示“ display:none;”。 樣式屬性。 因此,當我按下“保存”按鈕時,我檢查此塊是否以這種方式可見:
Assert.assertTrue("There is no validation error!", driver.findElement(By.id("validationModal")).isDisplayed());
這可行。 但是,當我嘗試檢查是否顯示了該塊中的消息時,isDisplayed方法始終返回“ false”。 當我只使用這個:
driver.findElement(By.id("validationModal")).findElement(By.tagName("ul"))
.findElement(By.xpath("//*[contains(text(),'Empty app name field')]"));
可以正常運行,但這是錯誤的,因為當此文本不可見,但將在頁面代碼中時,它不會引發異常。 如果我這樣寫:
Assert.assertTrue(driver.findElement(By.id("validationModal")).findElement(By.tagName("ul"))
.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed());
它總是失敗。 而且我真的不明白為什么以及如何檢查,以正確的方式顯示了錯誤消息的文本。
UPD:我找到了問題的根源。 該字符串不是在“ validationModal”塊內找到元素,而是在標記內(其中包含我們必須查找的文本)找到元素。
driver.findElement(By.id("validationModal")).findElement(By.tagName("ul"))
.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed()
但是我仍然不明白為什么會發生這種情況,因為我指定了要在其中搜索的元素。
似乎您正在嘗試與某些模式框架進行交互。
通常,要與模態元素進行交互,應首先更改驅動程序上下文。
driver.switchTo().frame("ModelFrameTitle");
要么
driver.switchTo().activeElement()
查找或檢查元素,然后返回主框架
driver.switchTo().defaultContent()
嘗試這個 :
Assert.assertTrue("Element is not displayed",driver.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed());
xpath中存在錯誤。
錯誤的字符串是:
findElement(By.xpath("//*[contains(text(),'Empty app name field')]"))
正確的是:
findElement(By.xpath("//li[contains(text(),'Empty app name field')]")
))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.