【问题标题】:creating user defined function for selenium webdriver为 selenium webdriver 创建用户定义的函数
【发布时间】:2014-11-11 07:43:47
【问题描述】:

我想为我的 webdriver 自动化代码创建一些用户定义的函数。我试过了,但是失败了。

以下是我的代码

public class snapdeal {

    WebDriver driver= new FirefoxDriver();
    @Test
    public void test() {

             // I want open browser in function 1
        driver.get("http://amazon.in");
        driver.manage().window().maximize();

            // Function 2 for searching     
        driver.findElement(By.xpath("//li[@id='nav_cat_2'")).click();       
        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Shoes");
        driver.findElement(By.xpath("//input[@class='nav-submit-input']")).click();
        driver.findElement(By.xpath("//h2[@class='a-size-medium s-inline s-access-title a-text-normal' and contains(text(), \"Fbt Men's 8876 Casual Shoes\")]")).click();
               }
         }

如何在类中编写两个函数?

【问题讨论】:

  • 请在您的问题中包含错误或完整的异常堆栈跟踪

标签: java selenium-webdriver user-defined-functions


【解决方案1】:

您可能试图在 test() 中嵌套方法。 It is not possible.

您可以使用下面的代码调用 test() 中的相应方法。它按预期工作:

public class snapdeal {

    static WebDriver driver= new FirefoxDriver();

    @Test
    public void test() {
        //Method1 for Opening Browser.
        openBrowser();
        // Method2 for searching     
        searchElement();
    }

    public static void openBrowser(){
        driver.get("http://amazon.in");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    }

    public static void searchElement(){

        driver.findElement(By.xpath("//li[@id='nav_cat_2']")).click(); 

        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Shoes");

        driver.findElement(By.xpath("//input[@class='nav-submit-input']")).click();

        driver.findElement(By.xpath("//h2[@class='a-size-medium s-inline s-access-title a-text-normal' and contains(text(), \"Fbt Men's 8876 Casual Shoes\")]")).click();
    }

}

【讨论】:

  • @Anirudh:上面唯一缺少的是导入,当然可以在使用 IDE 时轻松添加。我向你保证,代码在运行时工作正常,这不是 sock-puppeting 的情况。 :)
【解决方案2】:

我认为这对您来说就像是 Selenium 的 Hello World,您可以使用 Junit 使用 Java 中定义的方法,并带有以下注释,这些注释可以在 here 中找到

但是按照规范,我们通常在Junit 中使用@Before 方法或在testng 中使用@BeforeTest 方法来设置webdriver 和AUT 的url,同样在您的代码中,有几个xpath 是错误的导致错误,请在下面使用 cmets 找到正确的工作代码:

import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.safari.SafariDriver;

public class snapdeal {

    public WebDriver driver;

    @Before
    public void setUP()
    {
        // I want open browser in function 1
        driver= new SafariDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get("http://amazon.in");
        driver.manage().window().maximize();
    }

    @Test
    public void test() {



        // Function 2 for searching     
        //driver.findElement(By.xpath("//li[@id='nav_cat_2")).click(); //element not needed      
        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Shoes");
        driver.findElement(By.xpath("//input[@class='nav-submit-input']")).click();
        driver.findElement(By.xpath("//*[@title=\"Fbt Men's 8876 Casual Shoes\"]//h2")).click();
    }
}

上面的代码可以按需要工作。

【讨论】:

    【解决方案3】:

    创建用户定义函数有两个不同的作用域

    1) 使用一段代码创建函数并在需要时调用该函数(如上所述)

    2) 第二个创建自定义函数 wrt 每个控件,如编辑框、单选按钮、复选框等,因此通过创建此函数,您可以使您的自动化框架更好地可行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 2017-05-11
      相关资源
      最近更新 更多