我正在写一个测试来扩展和折叠页面上的某些可折叠元素。网址:https://blackrockdigital.github.io/startbootstrap-sb-admin-2/pages/panels-wells.html
我的页面对象中有以下代码:
git log --follow -- <filename>
当我要折叠一个元素时,一切正常。但是,当我尝试扩展元素时,它什么也没做-也不例外,但是代码没有执行。我究竟做错了什么?请帮助我。
答案 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));