【问题标题】:How Can I Retrieve Text from a div using Cucumber?如何使用 Cucumber 从 div 中检索文本?
【发布时间】:2018-12-06 17:41:36
【问题描述】:

我一直在尝试从各种 div 和表格中获取我在 Cucumber 中编写的一些 BDD 的文本。每次我尝试从我正在处理的网站的前端获取任何东西时,它什么都没有。我需要知道我具体需要做什么才能获取此内容。

我试图从中检索的页面元素与此类似

 <div id="statMsg" class="statusMsg">Your changes are saved.</div>

这是当前尝试从 div 中检索文本的两种方法。

 public WebElement savedText() {
    return webdriver.findElement(By.className("statusMsg"));

 public void UserClicksOnSave() throws InterruptedException {
    daSave.saveOn().click();
    daPage.savedText().getText();

【问题讨论】:

  • 猜这是一个时间问题,代码在 div 可见之前检查。您是否尝试过使用 ExpectedCondition 来了解此元素的可见性。要对此进行测试,请尝试放置一个 thread.sleep 来确认它是否是时间问题。如果你使用 id 来选择元素而不是类,那就更好了。也许你在文本元素之前的层次结构中得到了一些元素,具有相同的类属性。
  • 我昨天下午确实这样做了,它奏效了。
  • 你没有抓住重点。在您的代码单击保存按钮和检查文本之间没有延迟。看起来您正在使用页面对象,因此您也可能需要刷新页面对象才能获取文本,但您可能只需要等到页面完成后再检查文本。如果它有时有效但有时无效,则几乎总是时间问题或刷新问题。
  • 我更精通在 C# 中使用 Selenium,但应该有一种方法可以让 Web 驱动程序“等待”某个条件为真。基本上,让网络驱动程序等待文本出现在 DIV 中。在单击按钮和 Selenium 从屏幕上的元素获取文本之间,您可能会出现竞争条件,它获取文本的速度比屏幕上更改文本的速度要快。或者它找到 DIV 太快了。

标签: java selenium cucumber bdd


【解决方案1】:

通过 XPATH 找到包含您要查找的文本的 DIV:

public WebElement savedText() {
    String xpath = "//div[contains(@class, 'statusMsg'][contains(., 'Your changes are saved.')]";

    return webdriver.findElement(By.xpath(xpath));

Selenium 应该隐式等待与该类名匹配并包含给定文本的 DIV。 findElement 方法应仅在两个条件都为真时返回,这应与测试中的竞争条件作斗争。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2020-06-12
    • 2016-03-28
    相关资源
    最近更新 更多