我尝试使用selenium + TestNG创建的每个测试脚本都会发生这种情况。 在第一个@test方法之后,webdriver永远不会识别其余@test
方法上的元素,并始终将它们声明为失败。
为了简化以下情况:
网页驱动程序加载一个页面,在第一个@test(priority=0)
它搜索谷歌登录按钮并单击它以加载谷歌登录屏幕。
在第二个@test(priority=1)
我试图通过其ID识别电子邮件文本字段,但我总是得到一个未找到的元素的例外。
但是,如果我将代码从第二次测试移动到第一次测试,它就会成功执行
这是一段代码。 enterCredentials()
方法是问题发生的地方。
public class CSgoogleLogin extends CloudDriver {
@Test(priority=0)
public void attemptLogin(){
WebElement myDynamicElement = (new WebDriverWait(driver, 100))
.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='ROOT-2521314']/div/div[2]/div/div[1]/div/div/div/center/div[3]/div[2]/div[1]/div/span/img")));
driver.findElement(By.xpath("//*[@id='ROOT-2521314']/div/div[2]/div/div[1]/div/div/div/center/div[3]/div[2]/div[1]/div/span/img")).click();
}
@Test(priority=1)
public void enterCredentials(){
WebElement myDynamicElement;
if(!driver.findElement(By.id("Email")).isDisplayed()){
myDynamicElement = (new WebDriverWait(driver, 1))
.until(ExpectedConditions.presenceOfElementLocated(By.id("Email")));
}
//Entering Username
driver.findElement(By.id("Email")).sendKeys("xyz");
driver.findElement(By.id("next")).click();
myDynamicElement = (new WebDriverWait(driver, 1))
.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='Passwd']")));
//Entering Password
driver.findElement(By.id("Passwd")).sendKeys("xyz");
driver.findElement(By.id("signIn")).click();
}}
以下是CloudDriver类。更重要的是,在运行调试时,代码可以正确执行。
public class CloudDriver {
protected WebDriver driver = null;
@BeforeSuite
public void setUP(){
driver = new FirefoxDriver();
driver.get("http://apps3.thecloudstream.com/");
}
@AfterSuite
public void Closing(){
driver.quit();
}
}
答案 0 :(得分:0)
你能否展示" CloudDriver"的代码?上课?
我没有看到任何查看当前代码的失败。你能尝试在@BeforeClass方法中设置驱动程序实例吗?如下所示:
public class CSgoogleLogin extends CloudDriver {
Webdriver driver = null;
@BeforeClass
public void setUp(){
driver = getDriverInstance();//Get this instance from the super class.
}
@Test(priority=0)
public void attemptLogin(){}
@Test(priority=1)
public void enterCredentials(){}
答案 1 :(得分:0)
我通过应用隐式等待解决了这个问题。 即输入凭证
driver.manage().timeouts().implicitlyWait(3, TimeUnit.seconds);
// Entering Username
driver.findElement(By.xpath("//*[@id='Email']")).sendKeys(
"daisy.d.bogus@gmail.com");
driver.findElement(By.xpath("//*[@id='next']")).click();
隐式等待轮询dom给定时间,直到找不到相关元素或元素。