【问题标题】:Selenium + Java | Advice on how to handle waiting and an assert硒+Java |关于如何处理等待和断言的建议
【发布时间】:2016-01-11 21:42:27
【问题描述】:

你好,谁可能正在阅读这篇文章:P。

我正在为我们在工作中开发的几个新网站进行自动化处理,虽然我现在已经完成了大部分工作,但我不确定处理这种特殊情况的最佳方法是什么。

该网站是一个店面,带有用于提交信用卡付款的常用付款表格,然后当系统通知您操作是否正在等待、已完成或失败时,会显示加载屏幕。它是使用一个响应式框架完成的,这个框架的名字现在让我很遗憾(Angular?)。

有 3 行我想要一些关于如何处理的建议。

首先等待加载图像消失。这是生成它的 HTML 行:

<div class="poll-loader-spinner ng-scope" ng-show="editCtrl.pollInfo.status === 'PENDING' || editCtrl.pollInfo.status === 'RETRY'"><div class="hexdots-loader">Loading...</div></div>

我在这里尝试做的是:

new WebDriverWait(getDriver(), 60).until(ExpectedConditions.
    invisibilityOfElementLocated(By.cssSelector(".poll-loader-spinner .ng-scope")));

但它似乎并没有按预期工作,因为即使元素仍然在屏幕上可见并且在 60 秒超时到期之前,它也会返回控制。对于元素不可见时的上下文,将类“ng-hide”添加到上面的 HTML 行中。有什么想法吗?。

===========

另一位是如何断言/验证 2 个可能的结果。这些是 HTML 行:

<div class="poll-loader ng-scope ng-hide" ng-show="editCtrl.pollInfo.status === 'SUCCESS'"><i class="fa fa-check poll-fa-icon"></i><p>Congrats! Your course has been successfully paid for!</p></div>
<div class="poll-loader ng-scope ng-hide" ng-show="editCtrl.pollInfo.status === 'ERROR'"><i class="fa fa-times-circle poll-fa-icon"></i><p>I'm sorry, there seems to be an error.</p></div>

只要在浏览器中可见一行,'ng-hide' 类就会被删除(并添加到上面的加载栏)。我的想法是断言 P 标签之间的文本,但我不确定捕获该文本/整个元素的最佳方法是什么。

最好不使用 xpath。如果除了使用 XPath 之外没有其他简单/干净的方法可以做到这一点,我可以戳 webdev 并查看他是否可以在需要的地方添加 ID。

【问题讨论】:

    标签: java selenium selenium-webdriver css-selectors


    【解决方案1】:

    问题在于您的 CSS 选择器 ".poll-loader-spinner .ng-scope" - 基本上它会匹配位于具有 poll-loader-spinner 类的元素内的具有 ng-scope 类的元素。而且,由于没有这样的元素 - 您的预期条件立即得到满足。

    改为只使用.poll-loader-spinner CSS 选择器。


    至于你的第二个问题,为什么不直接根据ng-show定位元素并检查它们是否显示:

    driver.findElement(By.cssSelector("div.poll-loader[ng-show*=SUCCESS]")).isDisplayed();
    driver.findElement(By.cssSelector("div.poll-loader[ng-show*=ERROR]")).isDisplayed();
    

    *= 这里的意思是“包含”。

    【讨论】:

      【解决方案2】:

      删除 css 选择器中的空格字符。使用以下:

      ".poll-loader-spinner.ng-scope"
      

      【讨论】:

      • 仅供参考,一般来说,ng-scope 不是在 css 选择器中使用的好选择。另外,在这里可以看到一些解释和修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多