【问题标题】:Javascript-generated text not seen by "$I->see""$I->see" 看不到 Javascript 生成的文本
【发布时间】:2016-05-16 16:34:27
【问题描述】:

在目标页面上添加一些输入并按下按钮后,将运行一个 JS 脚本,这将导致(除其他外)页面中显示一个文本。

"$I->see" 行是一个较长测试的最后一部分,到目前为止它是成功的。

  • 三重检查命名、语法或拼写错误;
  • 尝试对文本同时使用 CSS 和 XPath;
  • 尝试使用 Locator(但由于不知道如何使用 Webdriver 进行设置而惨遭失败);

我在终端中不断遇到的错误是:

按名称、CSS 或 XPath 元素定位的元素不是 找到了。

网页段落部分:

<div class="doc-remote-add" style="background-color: rgb(250, 255, 189); border-color: rgb(247, 218, 56);">
    <b>Important Delivery Info</b>
    <br/>
    The text I am searching for with codeception is here (no, there is no <p>).
</div>

如果没有别的,任何人都可以写一个像样的定位器配置计划吗?来自官方页面的use \Codeception\Util\Locator; 并没有真正削减它。

【问题讨论】:

    标签: codeception acceptance-testing


    【解决方案1】:

    您可以尝试在异常时从 DOM 中重新选择元素:

    try {
            $I->seeElement($selector);
        } catch (\Facebook\WebDriver\Exception\StaleElementReferenceException $e) {
            $selector = <reselect_element_from_DOM>;
            $I->seeElement($selector);
        }
    

    【讨论】:

      【解决方案2】:

      谢谢,谢尔盖,但我找到了一个更简单的解决方案。

      确实,主要问题是测试会立即查找文本。解决这个问题的最简单和最优雅的方法是放置一个 $I->wait();在 see 命令之前,所以它是这样的

      /* ...
      rest of test
      ... */
      $I->wait(3);
      $I->see('text i wanna see');
      

      【讨论】:

        【解决方案3】:

        这种情况下可以使用这个方法:

        $I->waitForElement($element, $timeout = null);
        

        方法一直等到元素出现在页面上。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-20
          • 1970-01-01
          • 2022-10-23
          • 2022-10-23
          • 2013-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多