- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Selenium 页面对象使用 Java 编写一些 UI 自动化测试。
我在页面上的一个元素上遇到了一些问题。有问题的元素是一个可点击的面板,点击后就会展开并显示之前隐藏的一些字段和 UI 的其他项目。当再次单击面板时,字段将再次恢复隐藏状态。
我遇到的问题是,当我在面板上单击时,它有时会显示以前隐藏的字段,有时会显示它们,但很快就会再次隐藏它们。然后,这将使我的下一个操作(单击之前隐藏的字段之一)失败,因为该字段不存在。
我使用 elementToBeClickable
显式等待两个字段。
我认为解决这个问题的最佳方法是编写一个返回方法来检查隐藏字段是否存在,如果该方法返回 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();
}
最佳答案
我猜测在点击发生之前你的 javscript 还没有在页面上执行。您可能需要改进您的等待代码,以确保 js 在 Selenium 继续之前确实已执行。你可以使用一个很大的大脏
Thread.wait(10000);
在代码的证书部分验证该假设,但不要将其保留在适当的位置,因为这显然会降低测试套件的速度。如果没有看到更多代码,就很难在本地完全重现该问题,因此您可能需要发布更多代码。例如,您的等待方法以及 html 和 javascript 的片段。
我还看一下 https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/
上面的链接提供了一些有关等待 js 的详细信息.. 您可以使用一个 javscript 执行器来执行此操作。 HTH。
关于java - Selenium 元素并不总是可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51415030/
我是一名优秀的程序员,十分优秀!