当使用 selenium 等待页面刷新后,webelement 的状态从初始值 "xxx" 更改为更改值 "yyy" 时如何处理?

How to tackle when the status of an webelement changes from initial value "xxx" to changed value "yyy" after the page refresh with selenium wait?

这是我试过的方法,但没有成功,
不确定我哪里出错了?

   if (("xxx").equals(messageStatus)) {      
   FluentWait<WebDriver> wait = new FluentWait<WebDriver> (driver)            
                .withTimeout(90, TimeUnit.SECONDS)                  
                .pollingEvery(500, TimeUnit.MILLISECONDS)            
                .ignoring(NoSuchElementException.class);              

  wait.until(new Function<WebDriver, WebElement>() {      
            public WebElement apply(WebDriver webDriver) {            
           String messageStatus =
  MessageLogPage.messageStatus.getText();            
                if (messageStatus.equals("yyy")){              
                    MessageLogPage.receivedPresentation.click();            
                }      
                    return null;          
                 }                
        });    

任何help/suggestions提前多appreciated.Thanks!

我认为问题可能在于,如果您的页面真正刷新,对 MessageLogPage.messageStatus 的旧引用将变得无效。 IE。不仅 messageStatus 文本发生了变化,元素实例本身也发生了变化。

所以我会更改算法以在每次获取元素之前获取它的文本。另外你不应该点击里面等待,在:

之后再做
  wait.until(new ExpectedCondition<WebElement>() {      
           @Override public WebElement apply(WebDriver webDriver) {            
               try {
                   WebElement element = webDriver.findElement(By.<...>); // however you can locate MessageLogPage.messageStatus
                   if(element.getText().equals("yyy")) {
                       return element;
                   }      
                }
                catch(Exception e) { } // keep going (retun null)
                return null;                
        });    

wait.until 会多次调用这个函数,直到 return 值不为 null 或超时已过,在这种情况下它会抛出异常。所以 wait.until 之后的下一行可以是点击:

 wait.until(...); // above code
 MessageLogPage.receivedPresentation.click(); // we are here only if wait.until did not throw the exception

虽然有可能MessageLogPage.receivedPresentation如果页面刷新也可能无效

您甚至可以通过 returning Boolean 进一步简化它,因为您在找到它后并不真正关心这个元素:

  wait.until(new ExpectedCondition<Boolean>() {      
           @Override public Boolean apply(WebDriver webDriver) {            
               try {
                   WebElement element = webDriver.findElement(By.<...>); // however you can locate MessageLogPage.messageStatus
                   return element.getText().equals("yyy");
               }
               catch(Exception e) { } // keep going (return false)
               return false;          
        });