【发布时间】:2014-09-02 15:44:28
【问题描述】:
请看下面的部分代码:
public class OrderDetailsDashboard extends AbstractTestNGSpringContextTests {
By orderDetails = By.cssSelector(".col-md-12 span strong");
By orderMoreDetails = By.cssSelector(".row.panel-info-summary span strong");
By refundOrderButton = By.cssSelector(".refund-order-action");
public orderDetails getOrderDetails(WebDriver driver) {
logger.info("About to collect and returns the specific order details - refreshing page");
WebDriverWait waitForTitle = new WebDriverWait(driver,30);
try {
waitForTitle.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(orderMoreDetails));
}
catch (StaleElementReferenceException ex) {
waitForTitle.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(orderMoreDetails));
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
waitForTitle.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(orderDetails));
我有一个似乎已经解决的问题,但我对解决方案不满意。 我正在尝试使用我的自动化加载页面。下一个元素(此处表示为页面对象):
By orderDetails = By.cssSelector(".col-md-12 span strong")
在我的页面上出现了 6 次,并且只包含粗体文本。我注意到,当我尝试获取第 7 个元素文本时,我得到了Index Out Of Bounds Exception。虽然我使用wait() 方法。
最后我意识到wait() 是等待,但不是为了让 ALL 元素被怨恨,这就是我的测试失败的原因。 (这也是我添加thread.sleep方法的原因)。
有没有办法使用wait() 方法来实际等待页面上的ALL 元素?
【问题讨论】:
-
"下一个元素 [...] 在我的页面上出现了 6 次" 如果页面上有 有 6 个元素,然后您尝试获取第 7 个元素是的,你会有一个例外。你的意思是说虽然Selenium发现 6,但实际上多于超过6?
-
当页面启动时,有 7 个元素具有相同的类名,我正在尝试处理最后一个(第 7 个)。这就是我使用等待的原因() 方法,只是在这里它只等待第一个元素的可见性,所以当我试图应用到第 7 个元素时,我得到一个异常。这就是我使用 thread.sleep 的原因。我的问题是是否有任何告诉 selenium 的方法实际上都在等待页面类名相同的所有元素。
标签: java selenium selenium-webdriver automation wait