簡體   English   中英

isDisplayed始終為特定元素返回false

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM