在另一个元素中使用显式等待来查找元素

时间:2019-11-27 13:57:41

标签: java android automation appium qa

我有以下代码:

List<MobileElement> messages = driver.findElements (By.id ("body_bubble")); //find all messages
MobileElement lastMessage = messages.get (messages.size () - 1); //get last message

// xpath query to check if the message is delivered
String xpathDeliveryStatus = ".//*[contains(@resource-id, 'delivered_indicator') or contains(@resource-id, 'read_indicator') or contains(@resource-id, 'sent_indicator')]"; 
MobileElement deliveryStatus = lastMessage.findElement (By.xpath (xpathDeliveryStatus));

除了要使用显式等待找到deliveryStatus变量外,我想做同样的事情。
因此,我想使用
deliveryStatuslastMessage变量中找到wait.until (ExpectedConditions.visibilityOfElementLocated (By.locator))变量

我该怎么做?

我不想使用一个巨大的Xpath。此外,我什至不知道如何使用 Xpath 查找ID为body_bubble的最后一个元素,因为这些元素的数量并不固定并且总是在变化。

P.S。 。例如,在Python中,我们可以使用构造函数中的元素而不是驱动程序来定义WebDriverWaitWebDriverWait(webelement, self.timeout)

不幸的是,它在Java中不起作用。

1 个答案:

答案 0 :(得分:1)

基于Java documentation on ExpectedConditions,看来我们可以使用presenceOfNestedElementLocatedBy在子元素上添加显式等待:

WebDriverWait wait = new WebDriverWait(driver, 15);

WebElement childElem = wait.until(
    ExpectedConditions.presenceOfNestedElementLocatedBy(lastMessage, By.xpath(xpathDeliveryStatus)));