Java 硒元素并不总是可以点击
我正在使用Selenium页面对象用Java编写一些UI自动化测试 我对页面上的一个元素有一些问题。所讨论的元素是一个可单击的面板,单击后将展开,并显示以前隐藏的一些字段和其他UI项。再次单击面板时,字段将再次恢复为隐藏 我遇到的问题是,当我开始单击面板时,它有时会显示以前隐藏的字段,有时会显示这些字段,但会很快再次隐藏它们。这将使我的下一个操作,即单击先前隐藏的字段之一失败,因为该字段不存在 我使用Java 硒元素并不总是可以点击,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用Selenium页面对象用Java编写一些UI自动化测试 我对页面上的一个元素有一些问题。所讨论的元素是一个可单击的面板,单击后将展开,并显示以前隐藏的一些字段和其他UI项。再次单击面板时,字段将再次恢复为隐藏 我遇到的问题是,当我开始单击面板时,它有时会显示以前隐藏的字段,有时会显示这些字段,但会很快再次隐藏它们。这将使我的下一个操作,即单击先前隐藏的字段之一失败,因为该字段不存在 我使用elementtobelickable对两个字段进行了显式等待 我认为解决这个问题的最好方法是编
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请。好的欢呼。在添加了等待后单击元素,现在所有测试都通过了,而不是少数几次失败。所以现在我需要找出原因。干杯!