【问题标题】:How do I run multiple Selenium tests with different required capabilties如何运行具有不同所需功能的多个 Selenium 测试
【发布时间】:2013-01-31 10:14:46
【问题描述】:

我想运行相同的测试代码:

例如

WebElement element = driver.findElement(By.name("q"));
element.sendKeys("mysql excel 2013");
element.submit();

// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());

// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
        return d.getTitle().toLowerCase().startsWith("mysql");
    }
});

// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
// Close the browser

具有不同的能力配置

DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setVersion("15");
capability.setCapability("flash", "11-4");

RemoteWebDriver driver =  new RemoteWebDriver(new URL("http://192.168.1.22:4444/wd/hub"), capability);

DesiredCapabilities capability = DesiredCapabilities.chrome();
capability.setVersion("21");
capability.setCapability("flash", "11-4");

RemoteWebDriver driver =  new RemoteWebDriver(new URL("http://192.168.1.22:4444/wd/hub"), capability);

在不创建具有不同功能的多个实例的情况下,最好的方法是什么? Selenium 是否提供了这样做的概念?

或者我会“简单地”使用某种循环结构来循环吗?

【问题讨论】:

    标签: unit-testing testing selenium


    【解决方案1】:

    为了实现这一点,您应该使用 testng 进行参数传递概念

    TestNg 套件

      <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
        <suite thread-count="2" name=MyTestSuite" parallel="tests">
    
          <test name="RunInFirefox" preserve-order="false">
           <parameter name="version" value="8"/>
           <parameter name="browser" value="firefox"/>
           <parameter name="flashVersion" value="11.2"/>
            <classes preserve-order="true">
               <class name="com.test.TestCase1"/>
               <class name="com.test.TestCase2"/>
               <class name="com.test.TestCase3"/>
            </classes>
          </test>
    
         <test name="RunInChrome" preserve-order="false">
           <parameter name="version" value="21"/>
           <parameter name="browser" value="chrome"/>
           <parameter name="flashVersion" value="11.2"/>
            <classes preserve-order="true">
               <class name="com.test.TestCase1"/>
               <class name="com.test.TestCase2"/>
               <class name="com.test.TestCase3"/>
            </classes>
          </test>
        </suite>
    

    TestNg 测试用例

    import org.openqa.selenium.WebDriver;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.AfterTest;
    
    public class ExampleTestCase {
    
    private static WebDriver driver;
    
    @Parameters({"browser,version,flashVersion"})
    @BeforeClass
    public void beforeClass(String browser,String version,String flashVersion) 
    {
        driver=getDriverInstance(browser,version,flashVersion);
        }
    
    @BeforeTest
    public void beforeTest() 
    {
    
    }
    @Test
    public void f() 
    {
        //your test code here
    }
    
    @AfterTest
    public void afterTest() 
    {
    
    }
    
    @AfterClass
    public void afterClass() 
    {
    
    }
    

    }

    getDriverInstance方法实现

    public static WebDriver getDriverInstance(String browser,String version,String flashVersion)
    {
        WebDriver driver=null;
        if(browser.equals("firefox"))
        {
            DesiredCapabilities capability = DesiredCapabilities.firefox();
            capability.setVersion(version);
            capability.setCapability("flash", flashVersion);
            driver =  new RemoteWebDriver(new URL("http://192.168.1.22:4444/wd/hub"), capability);
        }
        else if(browser.equals("chrome"))
        {
            DesiredCapabilities capability = DesiredCapabilities.chrome();
            capability.setVersion(version);
            capability.setCapability("flash", flashVersion);
            driver =  new RemoteWebDriver(new URL("http://192.168.1.22:4444/wd/hub"), capability);
        }
        return driver;
    }
    

    【讨论】:

    • 所以 TestNG 会使用不同的参数多次执行测试?
    • 所以我从你的回答中得到了一些东西:1. 没有原生的 selenium 方法来做这件事 2. 你用某种你提出 TestNG 的循环来做
    • 您也可以使用 selenium 网格做同样的事情,但是,您还需要实现一些机制来并行运行用例或将测试用例传递到不同的节点(您应该通过指定自定义来启动节点)请参阅此链接:rationaleemotions.wordpress.com/2012/01/23/…
    • thx,我已经有一个启动机器的脚本 - 使用自定义配置启动 selenium 节点,现在我必须看看如何调用机器。 , 如果必须为每台机器创建一个自己的 RemoteWebDriver 对象,不要?
    • 上述脚本无需更改。仅使用 RemoteWebDriver 实例化驱动程序的任何方式。在网格概念中,hud 将负责将测试用例分发到指定节点。
    猜你喜欢
    • 2021-09-24
    • 2022-08-16
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多