经过一段时间的搜索,我找不到任何解决方案。我来了。
在某些背景下,我正在尝试自动注册、确认和加入某个平台的"Live Class"。
要做到这一点,你每10分钟有一个5分钟的窗口,在那里你可以注册,然后确认,然后等待X时间,然后加入直播课程。
但这只是我想报名的第一部分。这就是我使用流畅的等待所做的:
public void joinPrivateClass() {
System.out.println("Starting join private class");
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(480))
.pollingEvery(Duration.ofSeconds(5))
.ignoring(NoSuchElementException.class);
WebElement signUp = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
WebElement signUpButton = driver.findElement(By.xpath("//*[@id="live-class-322102"]/div[1]/div/div/button"));
if(signUpButton.isDisplayed()){
System.out.println("button is displayed");
} else {
System.out.println("button is not displayed yet");
}
return signUpButton;
}
}); signUp.click();
}
我的问题是,在页面加载后,当fluentwait"工作"时,我希望每5秒有一个"按钮不显示",直到它被点击。但是,无论按钮是否显示,我都没有收到任何消息,既没有"按钮未显示"也没有"按钮已显示",所以我认为"等待"中有故障
有些事情要提一下,我不是一个程序员,所以很抱歉,如果我做错了什么,
同样在我的IDE(intelliJ)中,它将我标记为这部分代码的"驱动程序">
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
在"紫色"和这个"驱动程序":
public WebElement apply(WebDriver driver)
如果有什么关系的话!感谢您对的宝贵帮助
您的wait
是用ignoring(NoSuchElementException.class)
构建的。因此,只要按钮不存在,你的wait.until(...)
就会在findElement(...)
行默默地保持失败——它永远不会到达println(...)
。
从等待中删除ignoring(...)
,并将wait.until(...)
主体更改为类似的内容
WebElement signUpButton;
try {
signUpButton = driver.findElement(By.xpath("//*[@id="live-class-322102"]/div[1]/div/div/button"));
System.out.println("button is displayed");
} catch(NoSuchElementException ignored) {
System.out.println("button is not displayed yet");
}
return signUpButton;