这是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
文件时,我的执行会停止。
任何人都可以帮我解决这个问题吗?
答案 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。
祝你好运!