如何与ExtJS MessageBox元素中的按钮进行交互?

时间:2015-04-21 14:04:08

标签: java unit-testing selenium extjs junit

我有一个Ext.MessageBox,当用户点击我想要的网址上的按钮时会出现。

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

但它没有用。我已经检查了关于堆栈溢出的其他类似问题,但它并没有为我做好准备。 请帮助。

2 个答案:

答案 0 :(得分:2)

我假设你在谈论这种MessageBox元素:

enter image description here

由于extjs动态生成元素ID,因此定位元素ID并不容易。

但是有一些模式可以帮助你与按钮互动:

所以你需要做的是首先在隐式等待的帮助下找到元素,然后单击它:

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

答案 1 :(得分:1)

我自己也找到了解决问题的方法。我使用了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给出的解决方案是更清晰的解决方案,我已经接受了他的答案。