硒:即使应用了等待后,窗体也不可见

时间:2019-02-01 17:06:05

标签: ajax selenium-webdriver ajaxform webdriverwait

我正在使用具有部分视图的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>

此表单上有一个我需要单击的按钮。

我正在使用“等待”以确保在单击按钮之前显示了表单:

WebDriverWait wait = new WebDriverWait(driver, 20); 
WebElement ticketForm = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("TicketDetailForm")));

boolean isForm = ticketForm.isDisplayed();

执行上述代码时,出现以下错误:

  

预期条件失败:等待所定位元素的可见性   通过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 :(得分:0)

您可以检查表单部分视图是否显示,方法是检查其元素列表大小,然后在列表大小> 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
相关问题