硒含蓄地等不行?

时间:2015-12-22 18:57:51

标签: java selenium selenium-webdriver

我正在学习Java Maven Selenium。我希望在Selenium中使用implicitlyWait

  1. 打开网站(例如https://www.facebook.com
  2. 点击登录的电子邮件字段
  3. 等待20秒
  4. 输入我的电子邮件
  5. 这是我的简单代码:

    package com.org.learningMaven;
    
    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import org.testng.annotations.Test;
    
    public class HelloWorldTest {   
        @Test
        public void login() {
            WebDriver driver = new FirefoxDriver();
            driver.get("https://www.facebook.com/");
            driver.findElement(By.id("email")).click();
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            driver.findElement(By.id("email")).sendKeys("myemail@yahoo.com");
        }
        private void sendKeys(Keys enter) {
            // TODO Auto-generated method stub
    
        }
    }
    

    此代码无效。它只需打开Facebook,点击电子邮件字段&输入我的电子邮件ID,而不是在输入电子邮件前等待10秒。

4 个答案:

答案 0 :(得分:11)

Implicit WaitExplicit Waits不会以这种方式工作,他们会在指定的持续时间内等待元素,如果他们在下一步之前找到该元素,则会执行。

如果您希望测试等待确切的持续时间,您可能需要使用。

Thread.sleep(Time duration in milliseconds);

您可以参考Diff b/w Implict Wait and Explicit Wait

显式等待:显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。

隐式等待:隐式等待是指在尝试查找一个或多个元素(如果它们不能立即可用)时,WebDriver轮询DOM一段时间。

Thread.sleep :在睡眠代码中它将始终等待上述秒数,即使页面准备好在1秒后进行交互。所以这会减慢测试速度。

答案 1 :(得分:0)

Thread.sleep会暂停您在该特定时间段内的执行。这就是为什么不建议在执行脚本中使用Thread.sleep。 Implicit / Explicit等待处理特定webelement的地方。如果脚本发现页面中存在所需的Web元素,则脚本会继续运行。如果找不到提到的web元素,如果在该特定等待期间的网页中找到该元素。

答案 2 :(得分:0)

如果没有显示网页元素,并且您希望等待显示该元素,则以下代码将起作用。

package client;

import java.io.File;
import java.util.Scanner;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;

public class RESTClient {

    public static void main(String args[]) throws Exception {
        File f = new File("C:/Users/Public/Pictures/Sample Pictures/Desert.jpg");
       sendFile(f);
    }
    public static void sendFile(File file) throws Exception 
    {
    String BASE_URL="http://10.1.4.126:8080/rest/KVBSvasth/getKvbMemberDetails";
        HttpClient client = new DefaultHttpClient() ;
        HttpPost postRequest = new HttpPost (BASE_URL) ;
        try
        {

            //Set various attributes 
            MultipartEntity multiPartEntity = new MultipartEntity() ;

           // multiPartEntity.addPart("fileName", new StringBody(file.getName() != null ? file.getName() : file.getName())) ;

            FileBody fileBody = new FileBody(file) ;
            //Prepare payload
            multiPartEntity.addPart("attachment", fileBody) ;

            //Set to request body
            postRequest.setEntity(multiPartEntity) ;

            Scanner sc = new Scanner(new File("C:/Users/rishabh.keshari/Desktop/json.txt"));

            postRequest.setHeader("jsondataaa",sc.nextLine());
            //Send request
            HttpResponse response = client.execute(postRequest) ;

            //Verify response if any
            if (response != null)
            {
                System.out.println(response.getStatusLine().getStatusCode());
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace() ;
        }
    }
}

答案 3 :(得分:0)

实施WebDriverWait

public void waitForElement(WebDriver driver, WebElement element) {
    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.visibilityOf(element));

}