显式等待不适用于我的代码,因为该行代码不等待该元素可见或可点击

时间:2019-05-31 19:27:00

标签: selenium-webdriver

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

场景:

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

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

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();

硒没有错误,就像硒被禁用时单击按钮一样

1 个答案:

答案 0 :(得分:1)

在您的页面中,如果没有填写凭据输入,则会将disabled attribute添加到表单中。

enter image description here

并且当凭据不为空时,disabled属性将消失:

enter image description here

个人认为以上情况,我希望采用以下方法:

  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)]")));

更多信息: