硒元素并非总是可点击的

时间:2018-07-19 05:35:41

标签: java selenium selenium-webdriver

我正在使用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();
    }

1 个答案:

答案 0 :(得分:1)

我想您的javscript在点击发生之前尚未在页面上执行。您可能需要优化您的等待代码,以确保在Selenium继续执行之前js已明确执行。您可以使用很大的脏

Thread.wait(10000);

在代码的证书部分验证该假设,但不要保留该假设,因为这显然会破坏测试套件的速度。在没有看到更多代码的情况下,很难在本地完全重现该问题,因此您可能想要发布更多代码。例如,您的等待方法以及html和javascript的代码段。

Id还可以查看https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/

上面的链接提供了有关等待js的详细信息。您可以使用javscript执行程序来执行此操作。 HTH。