selenium-webdriver - 显式等待不适用于我的代码,因为该行代码没有等待该元素可见或可点击
问题描述
当我输入用户名和密码时,显式等待不是等待元素可点击
设想:
- 在 whataburger.com 上点击登录
- 输入用户名和密码
- 等待登录按钮启用并单击登录(这是 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 就像它在禁用时单击了按钮一样
解决方案
在您的页面中,当凭据输入未填写时,表单中会添加一个disabled
属性。
并且当凭据不为空时-该disabled
属性消失:
个人假设上述情况,我宁愿采用以下方法:
- 等到带有
disabled
属性的按钮消失 - 等到没有
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)]")));
更多信息:
推荐阅读
- javascript - Android Javascript接口函数在ajax回调中不起作用
- android - 如何获取 okhttp 存储的缓存大小为字节?
- python-3.x - 如何使用其他交替列表中的元素创建列表?
- asp.net - 过滤asp时击键之间的时间限制:DropDownList
- haskell - 将我的 Parser 类型描述为一系列 monad 转换器
- django - 当我运行 collectatic 以使用 django 将静态保存在 S3 存储桶中时出现 TypeError
- android - 如何获取json对象的名称并在登录android时打印它
- python - PIL图像旋转和背景问题
- php - MySQL没有从php插入数据
- c# - Crystal Report 导出为 pdf 阿拉伯字体较小的 Visual Studio 2015