Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 硒元素并不总是可以点击_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 硒元素并不总是可以点击

Java 硒元素并不总是可以点击,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用Selenium页面对象用Java编写一些UI自动化测试 我对页面上的一个元素有一些问题。所讨论的元素是一个可单击的面板,单击后将展开,并显示以前隐藏的一些字段和其他UI项。再次单击面板时,字段将再次恢复为隐藏 我遇到的问题是,当我开始单击面板时,它有时会显示以前隐藏的字段,有时会显示这些字段,但会很快再次隐藏它们。这将使我的下一个操作,即单击先前隐藏的字段之一失败,因为该字段不存在 我使用elementtobelickable对两个字段进行了显式等待 我认为解决这个问题的最好方法是编

我正在使用Selenium页面对象用Java编写一些UI自动化测试

我对页面上的一个元素有一些问题。所讨论的元素是一个可单击的面板,单击后将展开,并显示以前隐藏的一些字段和其他UI项。再次单击面板时,字段将再次恢复为隐藏

我遇到的问题是,当我开始单击面板时,它有时会显示以前隐藏的字段,有时会显示这些字段,但会很快再次隐藏它们。这将使我的下一个操作,即单击先前隐藏的字段之一失败,因为该字段不存在

我使用
elementtobelickable
对两个字段进行了显式等待

我认为解决这个问题的最好方法是编写一个返回方法,检查隐藏字段是否存在,如果该方法返回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();
    }

我猜在单击发生之前,您的脚本没有在页面上执行。您可能需要改进等待代码,以确保在Selenium继续之前js已明确执行。你可以用一个很大的脏衣服

线程。等待(10000)

在代码的特定部分验证该假设,但不要将其保留,因为这显然会降低测试套件的速度。如果看不到更多的代码,就很难在本地完全重现问题,因此您可能需要发布更多的代码。例如,您的wait方法以及html和javascript的一个片段

我还要看一看


上面的链接给出了等待js的一些细节。。有一个脚本执行器,你可以用来做这件事。HTH.

您有什么异常吗?@IshitaShah我在下一个字段中得到一个“无法定位元素”,因为它仍然处于隐藏状态。但有时这才是令人沮丧的一点!您需要与目标元素共享代码块,在这之前使用。最好使用if/esle语句。如果所需元素不可见,请单击panelLink,否则不显示任何内容。if(ExpectedConditions.not(ExpectedConditions.visibilityofelementLocated)(…相关的HTML请。好的欢呼。在添加了等待后单击元素,现在所有测试都通过了,而不是少数几次失败。所以现在我需要找出原因。干杯!