【问题标题】:Finding Hidden/Disabled Element using Xpath使用 Xpath 查找隐藏/禁用元素
【发布时间】:2015-11-09 13:44:39
【问题描述】:

我正在尝试使用此代码在网页上查找按钮(预览/编辑),它将根据参数文本(按钮名称)单击按钮。

页面行为{当页面加载时,它会向您显示“编辑”按钮。如果您单击编辑,则会显示“预览”按钮,反之亦然}

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 +"'");
}

在我试图通过的测试用例中,

“预览”

“预览”

'编辑'

'编辑'

当页面加载时,将有“编辑”按钮并在测试用例中两次传递“预览”参数。它直接转到 else 等等。此外,传递“编辑”参数也转到 else 部分。我猜“如果”条件有问题。但是为了使“它应该根据快照检查包含'禁用'文本的类,以便在第一点就可以防止这个问题。

快照: 12

【问题讨论】:

    标签: java selenium xpath xpath-2.0


    【解决方案1】:

    您可以使用下面的方法根据名称单击按钮。在此方法上使用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();
    }
    

    【讨论】:

      【解决方案2】:

      当您将 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 +"'");
      } 
      

      【讨论】:

      • 这更有意义。 buttonName 在哪里声明?在这种情况下,似乎 s 永远不会包含 buttonName,因为它只是指向一个 div 元素并且不会关心它下面的内容。
      • 我正在尝试在 if 块中设置条件,如果 parentElement 是否获取一些文本并尝试转换为字符串并在传递 buttonName 时查找它是否包含文本。除了尝试查找该按钮是否显示之外。 buttonName 在 if 块中声明。
      • 我想尝试不同的方法,所以我提出了一些想法。
      猜你喜欢
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多