Selenium + Java |关于如何处理等待和断言的建议

时间:2015-10-14 00:00:56

标签: java selenium selenium-webdriver css-selectors

嗨,不管是谁可能会读到这个: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。

2 个答案:

答案 0 :(得分:1)

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

相反,只使用.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();

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

答案 1 :(得分:1)

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

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