首页 > 解决方案 > 显式等待不适用于我的代码,因为该行代码没有等待该元素可见或可点击

问题描述

当我输入用户名和密码时,显式等待不是等待元素可点击

设想:

  1. 在 whataburger.com 上点击登录
  2. 输入用户名和密码
  3. 等待登录按钮启用并单击登录(这是 selenium 不等待元素启用并单击的步骤)

我已经尝试了使用元素可点击、元素存在、元素可见性的所有显式等待功能

private static WebDriver driver;
private static WebDriverWait wait;

public static void main(String[] args) throws InterruptedException  {
    // TODO Auto-generated method stub

    Browsxers a = new Browsxers();
    try {
        driver = a.browse(driver);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    wait = new WebDriverWait(driver, 40);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
 driver.get("https://wbdotcomqa.azurewebsites.net/home");
 driver.findElement(By.xpath("//*[@id='navbar']/div/div[1]/div/div[2]/div/a/span[1]")).click();
 Thread.sleep(1000);
driver.findElement(By.id("username")).sendKeys("Whataburgerqa86+1112@gmail.com");
driver.findElement(By.id("password")).sendKeys("burger01");


WebElement wb = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//button[@class='btn wb-btn-default center-block']")));
wb.click();

没有错误 selenium 就像它在禁用时单击了按钮一样

标签: selenium-webdriver

解决方案


在您的页面中,当凭据输入未填写时,表单中会添加一个disabled 属性。

在此处输入图像描述

并且当凭据不为空时-该disabled属性消失:

在此处输入图像描述

个人假设上述情况,我宁愿采用以下方法:

  1. 等到带有disabled属性的按钮消失
  2. 等到没有disabled属性的按钮变为可点击

相关的代码行将是:

wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//button[@class='btn wb-btn-default center-block' and @disabled]")));
WebElement wb = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='btn wb-btn-default center-block' and not(@disabled)]")));

更多信息:


推荐阅读