【问题标题】:How to interact with buttons in ExtJS's MessageBox element?如何与 ExtJS 消息框元素中的按钮交互?
【发布时间】:2015-04-21 14:04:07
【问题描述】:

我有一个 Ext.MessageBox,当用户单击我想要的 url 上的按钮时,它会出现。

Ext.MessageBox.confirm('Confirm', 'Are you sure you want to do that?',function(btnText){
        if(btnText === "no"){

        }
        else if(btnText === "yes"){
             // Do Something
        }
    }, this);
}

我想测试此消息窗口上的“是”和“否”按钮。由于我没有为其设置 id,谁能告诉我如何访问这些按钮?

我尝试了类似的东西

WebElement y = driver.findElement(By.xpath("//a[2]/span/span/span[2]"));

但它没有用。我也检查了有关堆栈溢出的其他类似问题,但它对我来说并不适用。 请帮忙。

【问题讨论】:

    标签: java unit-testing selenium extjs junit


    【解决方案1】:

    我假设你说的是这样的 MessageBox 元素:

    由于 extjs 动态生成元素 ID,因此找到一个并不容易。

    不过还是有一些模式可以帮助您与按钮进行交互:

    所以你需要做的是首先通过隐式等待来定位元素,然后点击它:

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement yesButton = wait.until(
            ExpectedConditions.visibilityOfElementLocated(By.LinkText("Yes")));
    yesButton.click();
    

    【讨论】:

    • 非常感谢。是的,这正是我想要的。虽然我不得不将等待时间从 10 增加到 15,因为 10 请求由于超时错误而失败。
    【解决方案2】:

    我自己也找到了解决问题的方法。我利用 Chrome XPath Helper 扩展来找出这个“是”按钮的 XPath 并像使用它一样

    WebElement yesButton = driver.findElement(By.xpath("/html/body/div/div/div/div/a[2]/span/span/span[2]"));
    
    new WebDriverWait(driver, 5);
    yesButton .click();
    

    但@Viktor 给出的解决方案是更干净的解决方案,我接受了他的最佳答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2023-03-28
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      相关资源
      最近更新 更多