2

Boolean在 Webdriver 中定义了变量,支持如下:

boolean r1 = selenium.isTextPresent("something");

我在while循环中使用了这个。我想将我的代码转换为 Webdriver 代码,我尝试了:

boolean jr1 = driver.findElement(By.linkText("something")) != null;

但它仅在 text 存在且 value 为 时才有效true。当值应该返回false到我的变量时,我在控制台错误中收到:

Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate element: {"method":"link text","selector":"something"}

你能给我一些建议吗?

4

4 回答 4

4

我通过编写返回 true 或 false 的 isElementPresent 方法解决了这个问题。编辑-刚刚在另一个答案中看到了这种确切的方法,我不再相信我写了它。显然我很久以前就发现了它,并且已经使用了很长时间,感觉就像我的一样!所有归功于原作者

private boolean isElementPresent(By by) {
  try {
    driver.findElement(by);
    return true;
  } catch (NoSuchElementException e) {
    return false;
  }
}

然后你可以使用:

boolean jr1 = isElementPresent(By.linkText("Something"));

将此方法添加到基类并从中扩展您的测试类,或者将其添加到每个测试类中。

于 2013-05-07T14:59:25.760 回答
1

对我来说,将 isTextPresent 作为 webdriver 代码最直接的实现如下:

public boolean isTextPresent(String text) {
   String allText = webDriver.findElement(By.tagName("body")).getText();
   boolean isTextPresent = allText.contains(text);
   return isTextPresent;
}
于 2013-05-09T15:52:20.650 回答
0

如果元素没有链接文本“某事”,恐怕 Webdriver 总是会返回异常。

您是否尝试过预期条件?

try {
        wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("something")
        Boolean jr1 = True
    }
catch (Exception e) {
        Boolen jr1 = False
    }

这是一个相当粗略的实现,但在这种情况下,我将尝试找到该元素,如果找到它,则为 True。如果请求超时,则为 False。

于 2013-05-07T14:03:41.040 回答
0

我通过使用以下方法解决了这个问题:

  1. 最初我将 boolean msg not display 的值设置为 false
  2. 等待 50 秒,直到元素可点击
  3. 如果表中的文本等于显示的文本,即没有记录,则返回 true
  4. 否则返回假

    public boolean isRecordDisplayed(String sDisplayText) { Boolean isNoRecordDisplayedMsg = false;
    WebElement search = (new WebDriverWait(webDriver, 50).until(ExpectedConditions.elementToBeClickable(table)));

            if (search.getText().equals(sDisplayText)) {
                isNoRecordDisplayedMsg = true;
            }
            return isRecordHostDisplayedMsg;
        }
    

    By table = By.xpath("//div[contains(@class,'record')]//th");

于 2017-04-14T19:18:01.807 回答