2015-10-14 57 views
1

嗨,不管谁可能会读这个:P。Selenium + Java |关于如何处理等待和声明的建议

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

该网站是一个店面,通常付款表格提交信用卡付款,然后系统通知您系统是否正在等待,已完成或失败时的加载屏幕。它是通过一个响应式框架来完成的,它的名字现在让我感到遗憾(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-隐藏”类被移除(并添加到加载条以上)可见。我的想法是为P标签之间的文本声明,但我不确定捕获文本/整个元素的最佳方式是什么。

理想情况下不使用xpath。如果没有其他简单/干净的方法比使用XPath更好,我可以戳webdev并查看是否可以在需要时添加ID。

回答

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

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

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

仅供参考,一般来说'ng-scope'不是在css选择器中使用的好选择。另外,一些解释和解决方法一起可以很好地在这里看到。 – alecxe