Java 为代码中的特定行设置不同的等待时间

Java 为代码中的特定行设置不同的等待时间,java,mobile,automation,appium,wait,Java,Mobile,Automation,Appium,Wait,我正在使用appium、java、JUnit和作为maven项目在android上自动化一个LoadMoney操作。为了处理超时异常,我有如下等待能力: wait=newwebdriverwait(驱动程序,15) 我通常这样写: wait.until(ExpectedConditions.elementtobelickable(By.id(“login_btn”))。单击() 除了一行之外,这种方法工作得很好。我想让我的代码等待60秒左右的特定行。因为加载该页面大约需要60秒 publ

我正在使用appium、java、JUnit和作为maven项目在android上自动化一个LoadMoney操作。为了处理超时异常,我有如下等待能力:

wait=newwebdriverwait(驱动程序,15)

我通常这样写:
wait.until(ExpectedConditions.elementtobelickable(By.id(“login_btn”))。单击()

除了一行之外,这种方法工作得很好。我想让我的代码等待60秒左右的特定行。因为加载该页面大约需要60秒

    public void loadMoney() {

        successfulLogIn();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("loadBtn"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("currencyEur"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("activityLoadMoney_textView_cardLastFourDigit"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("rowYourCards_card_container"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("moneyInputLayout_editText_mainCurrencyAmount"))).sendKeys(loadMoneyAmount);
        wait.until(ExpectedConditions.elementToBeClickable(By.id("activityLoadMoney_textView_loadMoney"))).click();
        wait.until(ExpectedConditions.presenceOfElementLocated(By.id("successtext")));
        MobileElement result = driver.findElement(By.id("successtext"));
        Assert.assertEquals((result.getText()), "Successfully sent!");
    }
在上面的代码中,我希望我的代码为此行等待大约60秒

wait.until(ExpectedConditions.presenceOfElementLocated(By.id(“successtext”))

因为这篇文章大约需要60秒才能显示出来。如上所述,我的等待时间设置为15秒。因此,我得到了TimeoutException。。我不想把整个等待时间改为60秒,因为其他方法会花费太多时间。我只希望我的代码只为这一行等待60秒。我该怎么做?我需要为此编写一个新方法吗?如果是这样的话,怎么办?

你可以这样做

WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("activityLoadMoney_textView_loadMoney"))).click();

wait.wait(60);  // you need to add this line

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("successtext")))
这样,您就不会创建另一个
WebDriverWait


注意:如果下一个元素仅在
wait.wait(60)之后等待10秒,则需要再次将等待时间进一步更改为10秒将驱动程序等待时间设置为60而不是10

尝试了您的解决方案并添加了等待。等待(60);在前面提到的行之前。它在第二个wait()下面划线,并要求我向该方法添加InterruptedException。我添加了这个异常并再次运行测试。这次我得到了非法的MonitorStateException,在网上搜索了一下之后,我用Thread.sleep(60000)替换了wait.wait(60);它成功了。所以你间接地帮助了我虽然我确实想用wait而不是sleep来解决这个问题,但是我不想用thread创建另一个WebDriverWait对象as wait2,而是将其值设置为60,仅用于successtext根据您的建议,我在方法内部创建了它:
WebDriverWait waitFor40Seconds=new WebDriverWait(driver,40)
然后我为success屏幕编写以下代码:
等待40秒。直到(ExpectedConditions.elementtobelickable(By.id(“successtext”))这给了我超时异常,它没有等待40秒,而是等待默认的15秒:/Why 40 now当你之前有60秒等待时,我只是想测试它是否会等待40秒。但事实并非如此。然后我把它改为60秒,它也不起作用。