Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用Java的SeleniumWebDriver中等待一个页面,然后再转到另一个页面?_Java_Eclipse_Selenium_Selenium Webdriver - Fatal编程技术网

如何在使用Java的SeleniumWebDriver中等待一个页面,然后再转到另一个页面?

如何在使用Java的SeleniumWebDriver中等待一个页面,然后再转到另一个页面?,java,eclipse,selenium,selenium-webdriver,Java,Eclipse,Selenium,Selenium Webdriver,我是硒的新手。我将SeleniumWebDriver与Java一起使用。我使用eclipse作为IDE。我已经为登录页面编写了一些代码,并成功运行。现在,我想在成功登录后转到所需的页面,但我想在转换另一个页面之前等待一些时间。如何在加载另一页之前等待一页?据我所知,有3种方法: 隐式等待:(适用于页面上的所有元素) driver.manage() 显式等待:(适用于特定元素) WebDriverWait.until(找到元素的条件) 更具体的代码如下: WebDriverWait wait =

我是硒的新手。我将SeleniumWebDriver与Java一起使用。我使用eclipse作为IDE。我已经为登录页面编写了一些代码,并成功运行。现在,我想在成功登录后转到所需的页面,但我想在转换另一个页面之前等待一些时间。如何在加载另一页之前等待一页?

据我所知,有3种方法:

  • 隐式等待:(适用于页面上的所有元素)

    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调用期望时的超时(秒)。此抛出无法在
    方法中定位元素异常,直到
    方法。