当前位置: 首页 > 知识库问答 >
问题:

显式等待对我的代码不起作用,因为这行代码不等待该元素可见或可单击

林礼骞
2023-03-14

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

场景:

  1. 点击whataburger.com登录
  2. 输入用户名和密码
  3. 等待Signin按钮启用,然后单击Signin(这是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的行为就像它在被禁用时点击了按钮

共有1个答案

王修为
2023-03-14

在您的页面中,当没有填写凭据输入时,将有一个禁用的属性添加到表单中。

当凭据不为空时,禁用的属性会消失:

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

  1. 等待,直到具有禁用属性的按钮消失
  2. 等待,直到没有禁用属性的按钮变得可单击

相关代码行为:

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

更多信息:

  • XPath语法
  • 如何使用Selenium使用AJAX技术测试web应用程序
  • 如何等待元素在Selenium中不再存在
 类似资料:
  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 所以我们有一页医学专科。它原本只是英文的。因此,如果您搜索“neuro”,则HTML看起来类似于 然后他们添加了西班牙语,所以并不是所有的结果都会返回,但是只有西班牙语是可见的。一个新的 > 添加在底部。 是否有方法等待任何匹配xpath的元素可见?注意,visibilityOfAllElements()将不起作用,因为它们不会全部可见。 我想可以做的是,预先计算所有带有@id和“width”的元

  • 我将测试一个网络应用程序。在我的表中有一个按钮可以选择所有条目。我尝试过: selenium单击按钮,但什么也没发生。(还有send_Keys(Keys.Return))应用程序是用GXT开发的,我发现按钮后面有很多javascript。是否有可能等待事件加载器准备就绪?在单击之前等待可以解决问题,但不是自动测试的解决方案。

  • 问题内容: 我想知道是否可以告诉puppeteer等到显示的元素。 我有什么办法可以做到这一点? 问题答案: 我认为您可以为此使用功能。 要检查可用选项,请参阅github链接。

  • 当我点击一个按钮时,它会显示一个带有另一个按钮的表单,我想点击其中一个。这是一个视频(非常短),请观看http://screencast.com/t/zyliSemW1s1 所以我点击“买票”按钮,简单如下: 然后我等待下一个按钮被点击。 我使用下一个代码: 之后,我点击我等待的按钮: 我得到错误:元素在这一点上是不可点击的。 据我所知,该方法预期的条件。ElementToBeClickable(