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

标签 java selenium selenium-webdriver 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;          
                 }                
        });    

非常感谢任何帮助/建议。提前致谢!

最佳答案

我认为问题可能是,如果您的页面真正刷新,则对 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 将多次调用此函数,直到返回值不为 null 或超时,在这种情况下会抛出异常。因此,wait.until 之后的下一行可以是单击:

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

尽管如果页面刷新,MessageLogPage.receivedPresentation也可能无效。

您甚至可以通过返回 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;          
        });

关于java - 使用 selenium wait 刷新页面后,当 webelement 的状态从初始值 "xxx"更改为更改值 "yyy"时,如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902281/

相关文章:

java - 断言处理在 "console"和 "result of running suite"中给出不同的结果

java - 线程 "main"org.openqa.selenium.WebDriverException : permission denied 中出现异常

selenium - Firefox 47.0 在启动 selenium webdriver 时崩溃

r - 如何将 RSelenium ALT+S 中的同时键发送到网络驱动程序?

java - 生成 TestNG.xml 文件时出现问题

python - 当我运行多个测试时,Django LiveServerTestCase 无法加载页面

java - Listview 中的 Listview 不起作用

java - 在 ImageView 上放置一个角度

javax servlet 过滤器与 Jersey 过滤器

java - 数据java的XML解析