由于我正在使用UDEMY课程对TestNG进行试验,因此需要澄清依赖项。下面我有一种方法可以登录gmail 称为gmailLogin()。我有一个单独的方法,可以在Gmail搜索框中搜索主题(一旦登录),即gmailSearch()。
您需要登录Gmail帐户才能执行搜索。我做了两件事要实验
1)在gmailLogin()中提供了不正确的信息。这将失败。 2)我没有在gmailSearch()中使用dependsOnMethods =“ gmailLogin”。
测试gmailSearch()不会失败,因为它使用来自@BeforeMethod的Google主页搜索。 Google主页的搜索也使用name ='q'。
问题:设计gmailSearch()方法以使其被迫使用gmailLogin()的好方法是什么?如果当前的过程是一个不好的设计,那么我应该结合 登录并以一种方法搜索?
预先感谢您抽出宝贵的时间来解释/回答。
public class GoogleTest {
static WebDriver driver;
@BeforeMethod
public void setUp(){
System.setProperty("webdriver.chrome.driver", "path");
driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
}
@Test(priority=1)
public void googleSearch(){
driver.findElement(By.xpath("//input[@name='q']")).sendKeys("news");
driver.findElement(By.xpath("//input[@value='Google Search']")).click();
if(driver.getPageSource().contains("www.foxnews.com")){
System.out.print("Search found");
}
}
@Test(priority=2,groups="Gmail")
public void gmailIcon(){
driver.findElement(By.xpath("//a[@href='https://mail.google.com/mail/?tab=wm']")).click();
if(driver.getTitle().contains("Gmail")){
System.out.print("Gmail found");
}
}
@Test(priority=2,groups="Gmail")
public void gmailLogin(){
WebDriverWait wait = new WebDriverWait(driver,30);
driver.get("https://accounts.google.com/signin/v2/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&sacu=1&rip=1&flowName=GlifWebSignIn&flowEntry=ServiceLogin");
driver.findElement(By.xpath("//input[@type='email']")).sendKeys("aname@gmail.com");
driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@type='password']")));
driver.findElement(By.xpath("//input[@type='password']")).sendKeys("psd123");
driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click();
if(driver.getTitle().contains("Inbox")){
System.out.print("Gmail Inbox");
}
}
@Test(groups="Gmail")
public void gmailSearch(){
driver.findElement(By.xpath("//input[@name='q']")).sendKeys("QA"+ "\n");
if(driver.getTitle().contains("Search Results")){
System.out.print("Gmail Search");
}
}
@AfterMethod
public void testDown(){
driver.quit();
}
}
答案 0 :(得分:1)
您只能将所有内容放在一个类中,这不是一个好主意,您需要为每个页面设置单独的类。 最好使用POM(页面对象模型)。就您而言,您有两个不同的页面,登录页面和Gmail页面。因此,您需要为每个人上一堂课。然后,您可以为您的测试用例提供类。例如,登录和搜索,在此类中您可以调用登录和搜索。 您还需要验证登录名然后开始搜索(您可以进行测试以检查用户名,以确保用户已登录,然后如果可以,则可以执行测试)。 使用POM将帮助您更好地管理测试,尤其是在您的测试项目很大的情况下。 您可以了解有关POM here的更多信息。
答案 1 :(得分:1)
对于第一个问题,应该使用dependsOnMethods
创建方法依赖项。也就是说,methodB应该仅在methodA之后执行,然后methodB应该具有dependsOnMethods =“ methodA”
@Test(dependsOnMethods="methodA")
如果您不熟悉Selenium自动化,那么您的测试就可以了。但是它可以改善得更好。您正在尝试在一个类中处理所有事情。
此类完成以下操作
理想情况下,每个班级应该只承担一个责任。我建议您在下面的网站上进行更好的设计