Selenium:即使在应用 Wait 后表单也不可见
Posted
技术标签:
【中文标题】Selenium:即使在应用 Wait 后表单也不可见【英文标题】:Selenium: Form is not visible even after Wait is applied 【发布时间】:2019-06-26 07:10:27 【问题描述】:我正在使用具有局部视图的 MVC 应用程序练习 Selenium。
当页面被渲染时,我看到显示的表单:
<form action="/MyScreen/SaveData?Length=20" data-ajax="true" data-ajax-complete="handleComplete" data-ajax-failure="CheckError" data-ajax-loading="#loader" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#partialPlaceHolder" id="TicketDetailForm" method="post" novalidate="novalidate">
<div id="partialPlaceHolder" style="width:100%;">
<div id="Ticket-Details"></div>
</div>
</form>
这个表单有一个我需要点击的按钮。
我正在使用 Wait 来确保在单击按钮之前显示表单:
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement ticketForm = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("TicketDetailForm")));
boolean isForm = ticketForm.isDisplayed();
执行上述代码时,出现以下错误:
预期条件失败:等待定位元素的可见性 by By.id: TicketDetailForm。
我修改了代码以逐步获取元素,并且能够找到呈现 Button 的表单和占位符。
我正在使用 Wait 来定位表单的内容:
List<WebElement> forms = renderBody.findElements(By.tagName("form"));
WebElement placeHolder = forms.get(0).findElement(By.xpath("//div[@id='partialPlaceHolder']"));
WebElement ticketDetail = placeHolder.findElement(By.xpath("//div[@id='Ticket_Details']"));
我找不到 ticketDetail `WebElement
那可能是什么?
【问题讨论】:
【参考方案1】:您可以通过检查其元素列表大小来检查表单部分视图是否显示,然后在列表大小> 0时单击要单击的按钮 例如:
boolean partialViewDisplayed = false;
List<WebElement> partialViewElement= driver.findElements(By.id("Ticket-Details"));
while(!partialViewDisplayed)
if(partialViewElement.size()>0)
//Mark the boolean partialViewDisplayed true
partialViewDisplayed = true;
//Perform the further operations from here
【讨论】:
当我使用tagName
作为定位器时,我能够看到表单,但是,表单内部还有其他内容来自未使用Wait
呈现的局部视图。我相应地更新了代码
你能分享一下你需要检查它是否显示的内容的div结构吗?但是,我使用的逻辑也可以应用于此,您只需将表单的 xpath/id 替换为您需要检查其是否显示的内容。
所以只是为了确认,你需要等到<div id="Ticket-Details"></div>
被显示出来?
我已经编辑了我的答案。请立即检查并告诉我它是否有效
isDisplayed
永远不会更改为 true
以上是关于Selenium:即使在应用 Wait 后表单也不可见的主要内容,如果未能解决你的问题,请参考以下文章
即使在运行迁移后,Django Programming 错误列也不存在
即使在使用 view.setNeedsDisplay() 刷新视图后,.isHidden 属性也不反映对视图的更改
即使在 selenium ruby 脚本完成后如何让浏览器保持打开状态
selenium.wait()、selenium.wait(2000) 和 Thread.sleep(2000) 有啥区别? [复制]