Click() 方法并不总是有效

2022-09-01 05:56:03

我在Selenium WebDriver中的测试有问题。当程序尝试单击按钮时,该事件并不总是有效。在一次测试中,一切都没问题,而在其他测试中则不然。Click

每个测试从一页开始。首先,用户必须从组件中选择一个选项,然后用户单击按钮。select

我想知道为什么一次一切都很好,而当我第二次运行测试时,情况并非如此?

以下是查找并单击按钮的源代码:

public void clickContinueBtn() {    
    webElement = driver.findElement(By.xpath("//div[@class='btn magenta_s']/a/span"));
    webElement.click(); 
}

答案 1

我遇到了类似的问题。点击方法在其他页面上有效,然后在特定页面上根本不起作用。

争用条件导致了以下问题:

  1. HTML 内容在禁用按钮的情况下呈现。
  2. selenium Web 驱动程序脚本是在触发 javascript onload 事件(或完成执行)之前执行的。因此,将在禁用的元素上发生。什么都不会发生。button.click
  3. 然后javascript onload事件将触发(或完成执行),javascript将启用该按钮。
  4. 我看了看页面,无法弄清楚为什么我的代码不起作用,因为检查时按钮似乎已启用,如果我手动单击按钮,它就可以工作了。

一旦我发现这是一个时间问题,我就在这里找到了解决方案:如何让Selenium Web驱动程序等待元素可访问,而不仅仅是存在?

解释 Ruby 中的解决方案:

//This will not return the button until it is enabled.
button = driver.find_element(:xpath,  "//button[@id='myButtonId' and not(@disabled)]")
button.click

答案 2

您也可以尝试使用基于Javascript的替代方法来单击。其代码可以如下所示:

WebElement element = driver.findElement(By.id("something"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

推荐