Preserve-order = true在selenium-grid中不起作用

时间:2011-08-09 05:11:46

标签: selenium testng selenium-grid

@BeforeTest
@Parameters({"selenium.host", "selenium.port", "selenium.browser", "selenium.url" })
public void startServer(String host, String port, String browser, String url) throws Exception {      
        selenium = new DefaultSelenium(host, Integer.parseInt(port), browser, url);
        selenium.start();
    }

的testng.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SL-Grid" parallel="false">

    <parameter name="username" value="test" />
    <parameter name="password" value="test1" /> 

<test name="SL-Chrome" preserve-order="true"> 
    <parameter name="selenium.host" value="localhost"></parameter> 
        <parameter name="selenium.port" value="5555"></parameter> 
        <parameter name="selenium.browser" value="*googlechrome"></parameter> 
        <parameter name="selenium.url" value="http://properurl:8080/"></parameter> 
        <classes>
            <class name="com.TestBase" /> // Base class where all generic methods, setUp and tearDown methods present
            <class name="com.Login"> // Login related methods and inherit TestBase
                <methods>
                    <include name="loginPage" />
                    <include name="signIn" />
                </methods>
            </class>
            <class name="com.Page1">
                <methods>               
                    <include name="clickLinkA" />
                    <include name="isTextBoxXXXPresent" />
</methods> </class></classes></test>

<test name="SL-Firefox" preserve-order="true"> 
    <parameter name="selenium.host" value="172.16.4.21"></parameter> 
        <parameter name="selenium.port" value="5556"></parameter> 
        <parameter name="selenium.browser" value="*firefox"></parameter> 
        <parameter name="selenium.url" value="http://properurl:8080/"></parameter> 
        <classes>
            <class name="com.TestBase" /> // Base class where all generic methods, setUp and tearDown methods present
            <class name="com.Login"> // Login related methods and inherit TestBase
                <methods>
                    <include name="loginPage" />
                    <include name="signIn" />
                </methods>
            </class>
            <class name="com.Page2">
                <methods>               
                    <include name="clickLinkB" />
                    <include name="isListBoxXXXPresent" />
</methods> </class></classes></test>

</suite>

当我运行套件时,它应该从TestBase调用startServer() - &gt;来自Login的loginPage()和SignIn() - &gt;来自Page1的clickLinkA()和isTextBoxXXXPresent()。但很多时候系统首先从Page1类调用mathods因此失败(因为没有调用signIn)。

任何人都可以告诉我这里我错了。或任何其他更好的设计方式。或保留订单的任何替代

2 个答案:

答案 0 :(得分:0)

我认为这可能是TestNG中的问题,您可以向TestNg报告。但要解决您的问题,您可以添加登录信息。在您的BeforeTest中登录方法或在您的测试方法中调用它在这种情况下clickLinkA。 希望这能解决你的问题。

答案 1 :(得分:0)

考虑使用dependsOnMethods来确保一个依赖于另一个的测试在它之后运行。您还可以设置数字优先级,其中较低的数字首先运行。优先级的默认值为0,因此您只需将此设置为测试,以便在没有设置优先级的测试之后运行。