我正在使用Selenium页面对象用Java编写一些UI自动化测试。
我在页面上的一个元素上遇到了一些问题。有问题的元素是一个可单击的面板,单击后将展开,并显示以前隐藏的UI的某些字段和其他项目。再次单击该面板时,这些字段将恢复为再次隐藏。
我遇到的问题是,当我启动面板上的单击时,有时会显示以前隐藏的字段,有时会显示它们,但很快又将它们隐藏起来。然后,我将执行下一步操作,以单击以前隐藏的字段之一,因为该字段不存在而失败。
我对使用elementToBeClickable
的两个字段都进行了明确的等待。
我认为解决此问题的最佳方法是编写一个return方法,该方法检查是否存在隐藏字段,并且该方法返回false,然后再次单击面板。我显示是否返回TRUE或FALSE,并且在某些情况下可以返回FALSE,此修复程序可以继续正确地扩展面板,但仍能解决该问题。
我希望有一个简单的方法来解决这个问题。
下面是我的代码:
//this is my method to click the pannel
public void clickPanel() {
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(panelLink));
element.click();
//call another method to see if the hidden field is visible or not
boolean isHiddenLinkPresent = methodToCheckIfLinkPresent();
//show the results of if the field is hidden or not
System.out.println(isHiddenLinkPresent);
//if link is not present, try and click again
if (isHiddenLinkPresent == false){
element.click();
}
答案 0 :(得分:1)
我想您的javscript在点击发生之前尚未在页面上执行。您可能需要优化您的等待代码,以确保在Selenium继续执行之前js已明确执行。您可以使用很大的脏
Thread.wait(10000);
在代码的证书部分验证该假设,但不要保留该假设,因为这显然会破坏测试套件的速度。在没有看到更多代码的情况下,很难在本地完全重现该问题,因此您可能想要发布更多代码。例如,您的等待方法以及html和javascript的代码段。
Id还可以查看https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/
上面的链接提供了有关等待js的详细信息。您可以使用javscript执行程序来执行此操作。 HTH。