我有以下代码:
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
变量外,我想做同样的事情。
因此,我想使用
deliveryStatus
在lastMessage
变量中找到wait.until (ExpectedConditions.visibilityOfElementLocated (By.locator))
变量
我该怎么做?
我不想使用一个巨大的Xpath。此外,我什至不知道如何使用 Xpath 查找ID为body_bubble
的最后一个元素,因为这些元素的数量并不固定并且总是在变化。
P.S。 。例如,在Python中,我们可以使用构造函数中的元素而不是驱动程序来定义WebDriverWait
:
WebDriverWait(webelement, self.timeout)
不幸的是,它在Java中不起作用。
答案 0 :(得分:1)
基于Java documentation on ExpectedConditions,看来我们可以使用presenceOfNestedElementLocatedBy
在子元素上添加显式等待:
WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement childElem = wait.until(
ExpectedConditions.presenceOfNestedElementLocatedBy(lastMessage, By.xpath(xpathDeliveryStatus)));