如何在使用Java的SeleniumWebDriver中等待一个页面,然后再转到另一个页面?
我是硒的新手。我将SeleniumWebDriver与Java一起使用。我使用eclipse作为IDE。我已经为登录页面编写了一些代码,并成功运行。现在,我想在成功登录后转到所需的页面,但我想在转换另一个页面之前等待一些时间。如何在加载另一页之前等待一页?据我所知,有3种方法:如何在使用Java的SeleniumWebDriver中等待一个页面,然后再转到另一个页面?,java,eclipse,selenium,selenium-webdriver,Java,Eclipse,Selenium,Selenium Webdriver,我是硒的新手。我将SeleniumWebDriver与Java一起使用。我使用eclipse作为IDE。我已经为登录页面编写了一些代码,并成功运行。现在,我想在成功登录后转到所需的页面,但我想在转换另一个页面之前等待一些时间。如何在加载另一页之前等待一页?据我所知,有3种方法: 隐式等待:(适用于页面上的所有元素) driver.manage() 显式等待:(适用于特定元素) WebDriverWait.until(找到元素的条件) 更具体的代码如下: WebDriverWait wait =
driver.manage()代码>
WebDriverWait.until(找到元素的条件)代码>
WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
selenium.waitForPageToLoad("60000");//wait for 60 sec.
Thread.sleep(NUMBER_OF_MILLIS);
WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
线程睡眠(以毫秒为单位)代码>
WebDriver _driver = new WebDriver();
WebDriverWait _wait = new WebDriverWait(_driver, TimeSpan(0, 1, 0));
_wait.Until(d => d.FindElement(By.Id("Id_Your_UIElement"));
尝试使用隐式等待60秒。在Selenium WebDriver中如下所示:
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);//wait for 60 sec.
如果你需要等待更多的时间,可以选择80、90等等
对于Selenium RC,您可以使用以下代码:
WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
selenium.waitForPageToLoad("60000");//wait for 60 sec.
Thread.sleep(NUMBER_OF_MILLIS);
WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
可以使用以下线程来完成:
WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
selenium.waitForPageToLoad("60000");//wait for 60 sec.
Thread.sleep(NUMBER_OF_MILLIS);
WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
对于WebDriver中的显式等待,请在加载页面中标识一个元素,并编写如下代码:
WebDriverWait wait = new WebDriverWait(driver, 40);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
selenium.waitForPageToLoad("60000");//wait for 60 sec.
Thread.sleep(NUMBER_OF_MILLIS);
WebDriverWait wait = new WebDriverWait(driver, 40);//wait for 40 sec.
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
我真的建议不要使用Thread.sleep(线程数)。它不会稳定,你会在睡眠时间不够长的时候发作 如果只是等待DOM加载,那么触发页面加载的WebDriver事件将始终等待DOM加载,然后返回控件 但是,如果使用AJAX在DOM之后更改HTML,那么我建议您使用WebDriverWait,并等待已知事件发生(例如,对象以HTML显示、文本更改等)
如果你从这篇文章中拿走了一样东西,那么请停止使用睡眠 我用过这种方法。尝试找出页面上最后加载的元素。通过获取该元素的定位器并使用isDisplayed检查其存在性,您将能够看到整个页面何时加载您在使用什么?Selenium RC或Selenium WebDriver?我使用了:Thread.sleep(numberofmillis);现在它开始工作了。谢谢mabbas.WebDriverWait,最好等待一个元素。在这种情况下,它需要识别登录页的一个元素。图40在语句中代表什么:WebDriverWait wait=newwebdriverwait(driver,40)@TejeshRaut调用期望时的超时(秒)。此抛出无法在
方法中定位元素异常,直到方法。