使用Xpath查找隐藏/禁用元素

时间:2015-11-09 13:44:40

标签: java selenium xpath xpath-2.0

我试图在网页上找到按钮(预览/编辑),使用此代码根据参数文本(buttonName)单击按钮。

页面的行为{当页面加载时,它会显示您编辑'按钮。如果您点击“修改”,则会显示“预览”字样。按钮,反之亦然}

WebBrowserElement parentElement = waitForElement(By.xpath("//div[@class='serviceHeaderInner']"));
String s = parentElement.toString();
if (s.contains(buttonName) && (parentElement.waitForElement(By.xpath(".//a[.='" + buttonName + "']"))).isDisplayed()) {
    WebBrowserElement buttonElement = parentElement.waitForElement(By.xpath(".//a[.='" + buttonName + "']"));
    buttonElement.click();
} else {
    debugPrintln("        -> Invalid  buttonName '"+ buttonName +"'");
}

在测试案例中,我试图通过,

'预览'

'预览'

'编辑'

'编辑'

当页面加载时,会出现“编辑”字样。按钮和传递'预览'在测试用例中两次参数..它直接转到其他等等。另外传递'编辑'论证也转到了其他部分。我猜错了#34;如果"条件。但是为了更有活力,它应该检查包含“禁用”的课程。文本acc。快照,以便在第一点可以防止这个问题。

快照: 12

2 个答案:

答案 0 :(得分:0)

将parentElement强制转换为字符串时,为s分配了什么值?而不是在做.toString();

我认为你需要做{
.getAttribute("value");.getAttribute("text"); 。或者只是.text;

我们可以更改此if语句以使其正常工作。当页面加载或是否有等待时间时,这些按钮会显示吗?

也许我们可以试试这个,让我们不要使用父元素,因为这里似乎不需要。这可以稍微重构一下,但我们先试试吧:

if (findElement(By.xpath("//a[text()='" + buttonName + "']"))).isDisplayed()) {
    WebBrowserElement buttonElement = findElement(By.xpath("//a[text()='" + buttonName + "']"));
    buttonElement.click();
} else {
    debugPrintln("        -> Invalid  buttonName '"+ buttonName +"'");
} 

答案 1 :(得分:0)

您可以使用以下方法根据名称点击按钮。在此方法上使用try{} catch(){}来处理按钮不存在时的情况。

// button names can be one of [Edit, Preview]
// Provided you have only one button each on the name of Edit and Preview on your page
public void clickButtonBasedOnName(String buttonName) {
    waitForElement(By.linkText(buttonName)).click();
}