如何使用TestNG

时间:2017-02-06 11:29:42

标签: java selenium testng

这是testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Test Suite" parallel="methods" >
    <test name="Tools QA" > 
        <classes>
            <class name="automation.Prescan">
                <methods>
                <include name= "Startup" />
                <include name ="LoginTest" />
                <include name="EntryTest" />
                </methods>
            </class>
        </classes>
    </test>
</suite>

后跟我的firstTest.java文件     包自动化;

import org.testng.annotations.*;
import org.testng.annotations.BeforeMethod;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;

public class Prescan {
    String baseURL = "https://abc/login";
    public WebDriver driver;

    @BeforeMethod
    public void Startup() {
        System.setProperty("webdriver.chrome.driver", "C:\\ChromeDriver\\chromedriver.exe");
        System.setProperty("webdriver.gecko.driver", "C:\\GeckoDriver\\geckodriver.exe");
        // initialize driver
        driver = new ChromeDriver();
        // driver = new FirefoxDriver();
        // driver.get(baseURL);
    }

    // @Test (description="Prescan login")
    @Test(priority = 1)
    public void PrescanLogin() throws Exception {
        driver.get(baseURL);
        driver.findElement(By.id("clientCode")).sendKeys("A");
        driver.findElement(By.id("username")).sendKeys("lates");
        driver.findElement(By.id("password")).sendKeys("Ma4");
        driver.findElement(By.xpath("//button[contains(.,'Login')]")).click();
        Assert.assertEquals("Welcome", driver.getTitle());
        Thread.sleep(4000);
    }

    // @Test (description="Pres")
    @Test(priority = 2)
    public void PreEntry() throws Exception {
        // driver.switchTo().frame("frame");
        driver.findElement(By.name("account_number")).sendKeys("A7664685W");
        driver.findElement(By.name("inv_date_month")).sendKeys("17");
        driver.findElement(By.name("inv_date_day")).sendKeys("07");
        driver.findElement(By.name("add")).click();

        Assert.assertEquals("Client Login", driver.getTitle());

        Thread.sleep(4000);

    }

    @AfterClass
    public void exit() {
        driver.quit();
    }
}

运行此测试时,我收到此错误

PASSED: PrescanLogin
FAILED: PrescanEntry
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"name","selector":"account_number"}
  (Session info: chrome=56.0.2924.87)
  (Driver info: chromedriver=2.27.440174 )

当我执行上面提到的xml文件时,我的执行会停止。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

从你的错误判断;你的测试在这里失败了:

driver.findElement(By.name("account_number")).sendKeys("A7664685W");

这可能有很多原因。如果您可以使用您尝试查找的元素的某些html代码更新您的答案,将会有所帮助。但是,根据您已发送的内容;它看起来这些元素位于一个框架内,并且您没有按照您对线条进行评论来打开它。在从框架中删除//后,尝试在下方添加此行(您知道框架名称吗?):

 driver.switchTo().frame("frame");

在完成框架中的元素定位后,您可以返回:

driver.switchTo().defaultContent();

此外,这种查找这样的元素的方法(没有事先等待它们的建议也不建议,因为你的selenium脚本会跳过...自己试图在它加载到页面之前找到元素的方式)。所以为了避免这种情况,请使用waitForElement:

WebDriverWait wait = new WebDriverWait(driver, timeout); 
Boolean elementPresent = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(XpathLocator)).isDisplayed();

如果元素存在,上面将reutrn为TRUE,如果不存在则为FALSE。

祝你好运!