硒-扩展元素无效,而折叠则有效

时间:2018-11-29 15:17:15

标签: java selenium

我正在写一个测试来扩展和折叠页面上的某些可折叠元素。网址:https://blackrockdigital.github.io/startbootstrap-sb-admin-2/pages/panels-wells.html

我的页面对象中有以下代码:

git log --follow -- <filename>

当我要折叠一个元素时,一切正常。但是,当我尝试扩展元素时,它什么也没做-也不例外,但是代码没有执行。我究竟做错了什么?请帮助我。

1 个答案:

答案 0 :(得分:1)

即使可以对代码进行很多改进,但是如果添加一些等待,它仍然可以工作。您具有此展开和折叠动画,因此需要添加一些等待元素,以使元素在展开和折叠后变为可见或不可见。 我重新创建了您的代码,并在chrome中运行了它,然后进行了等待,然后我可以先折叠起来,然后展开第三个项目,而无需进行任何更改。

此外,这里有一些建议可以改善您的代码。 1-不要使用PageFactory,它不会提供任何好处。如果希望代码看起来更简洁,请将定位器保存在By元素中。

2-您不需要这些循环。由于您指定了要使用的元素编号,因此可以直接获取。没有循环。

3-您在if语句中不需要== true或== false

4-字符串值和整数基本上完成相同的工作,因此可以删除其中之一。

下面是经过改进的代码,它可以满足您的需求:

    public boolean checkIfElementIsExpanded(int number) {
        WebElement textElement = driver.findElement(By.xpath(("//*[@id='accordion']/div[" + number + "]/div[2]")));
        return textElement.isDisplayed();
    }


    public void collapseAnItem(int number) {
        WebElement itemHeader = driver.findElement(By.xpath(("//*[@id='accordion']/div[" + number + "]/div[1]/h4/a")));
        if (checkIfElementIsExpanded(number)) {
            itemHeader.click();
        }

        // Since you collapsing item, text will become invisible, so we need to wait for invisibility
        WebElement textElement = driver.findElement(By.xpath(("//*[@id='accordion']/div[" + number + "]/div[2]")));
        WebDriverWait wait = new WebDriverWait(driver, 3);
        wait.until(ExpectedConditions.invisibilityOf(textElement));
    }


    public void expandAnItem(int number) {
        WebElement itemHeader = driver.findElement(By.xpath(("//*[@id='accordion']/div[" + number + "]/div[1]/h4/a")));
        if (!checkIfElementIsExpanded(number)) {
            itemHeader.click();
        }

        // Since you collapsing item, text will become visible, so we need to wait for visibility
        WebElement textElement = driver.findElement(By.xpath(("//*[@id='accordion']/div[" + number + "]/div[2]")));
        WebDriverWait wait = new WebDriverWait(driver, 3);
        wait.until(ExpectedConditions.visibilityOf(textElement));
    }

为了测试,我添加了打印件,以便您查看结果:

System.out.println("Is element number 1 expanded: " + panelsAndWellsPage.checkIfElementIsExpanded(1));
panelsAndWellsPage.collapseAnItem(1);
System.out.println("Is element number 1 expanded: " + panelsAndWellsPage.checkIfElementIsExpanded(1));

System.out.println("Is element number 3 expanded: " + panelsAndWellsPage.checkIfElementIsExpanded(3));
panelsAndWellsPage.expandAnItem(3);
System.out.println("Is element number 3 expanded: " + panelsAndWellsPage.checkIfElementIsExpanded(3));