Preserver order=true在selenium网格中不起作用

Preserver order=true在selenium网格中不起作用,selenium,testng,selenium-grid,Selenium,Testng,Selenium Grid,testng.xml: @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

testng.xml:

@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();
    }

//存在所有泛型方法、设置和拆卸方法的基类
//登录相关方法并继承TestBase
//存在所有泛型方法、设置和拆卸方法的基类
//登录相关方法并继承TestBase
当我运行该套件时,它应该从TestBase->loginPage()调用startServer(),从Login->clickLinkA()调用SignIn(),从Page1调用isTextBoxXXXPresent()。但很多时候系统首先从Page1类调用mathods,所以失败了(因为并没有调用signIn)


谁能告诉我哪里错了吗。或者其他更好的设计方法。或者任何保留顺序的替代方法

我认为这可能是TestNG中的问题,您可以向TestNG人员报告。但是为了克服您的问题,您可以在BeforeTest中包含您的login&Signin方法,或者在您的测试方法中调用它(在本例中为clickLinkA)。
希望这能解决您的prblm。

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

Thank Varun。是的,根据您的建议,将loginPage&signIn代码插入startServer()可以正常工作。但我想将所有与登录相关的代码保存到com.login类中。因此,我在startServer()中创建了一个对象,并调用了loginPage()和signIn(),如下所示:loginPage lp=new loginPage();lp.loginPage();lp.signIn(用户名、密码)//通过编写上述代码,我现在可以从testng.xml中删除block,我个人希望使用testng套件,而不是创建对象和调用方法。但是没有选择,因为preserve order=“true”在我的情况下不起作用。无论你做什么,这都是正确的方法。您必须始终将重用代码作为方法保存在一个公共类中。并通过创建一个对象来使用它。优点是,如果您的登录逻辑发生更改,您只需在一个位置进行更改,而不是在多个位置进行更改。。现在所有的方法都被执行了,但是执行的顺序仍然是一个问题。。。Page2(搜索部分)总是在Page1(登录页)之前执行…如果Page2方法依赖于Page1测试执行?由于Page1和Page2类处于两个不同的测试中,它们将在不同的线程中执行。
<?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>