2016-07-25 145 views
2

运行多个测试用例时,硒会输入无效文本,如附件所示。 下面是显示错误的两个例子:硒在文本框中输入无效文本(一半文本)

  1. ,而不用输入AutomationTest123_6035633258972的,它只是进入6035633258972. Example1
  2. 而不是进入自动化测试123_636010703068635512,它只是 进入utomationTest123_636010703068635512。 Example2

代码

//StaticVariable is class which has static values 
    var username = StaticVariable.username; 
    var password = StaticVariable.password; 
    driver.FindElement(By.Id("username")).SendKeys(username); //putting wrong values 
    driver.FindElement(By.Id("password")).SendKeys(password); //putting wrong values 
    driver.FindElement(By.Id("login")).Click(); 

谁能帮助我在这?任何帮助将不胜感激。

+0

你能分享你的自动化代码吗? – selva

+0

@selva已更新代码。 – shoaib

+0

可以肯定的是,您是否将StaticVariable.username输出到日志以确保问题不在别处? – Nibb

回答

0

使用clear法然后输入文字:driver.findElement(By.cssSelector("").clear();

它可以帮助。

+0

一定要将代码格式化为代码,以便更易识别和正确格式化。您可以阅读编辑/格式帮助主题,但对于代码,最简单的方法是在代码前放置4个空格。 – JeffC

+0

@Arun我试过这个,但结果是一样的,它的输入半值文本。 – shoaib

0

首先是确保

var username = StaticVariable.username; 

被分配权值。 使用

print 

检查分配后的用户名值。

不是试图通过使用下面的代码:

driver.FindElement(By.Id("username")).click() 
driver.FindElement(By.Id("username")).clear() 
driver.FindElement(By.Id("username")).SendKeys(username); 
+0

你意识到你正在抓取页面3次以运行此代码?如果要使用一个元素2次或更多次,只需将其存储在一个变量中并引用它即可。它不仅会使执行速度更快,而且更易于维护。如果该ID改变,您将不得不在3个地方更新它。 – JeffC

+0

@noor我试过这个,但是它不工作的结果是一样的,它输入了一半的文本。 – shoaib

+0

@JeffC哟,明白了。 – shoaib

0

可以有几个原因,我已经看到了,这可能是一个问题。我首先尝试清除文本输入,并确保它具有焦点。

var username = StaticVariable.username; 
var password = StaticVariable.password; 
// Fill out user name 
var userElem = driver.findElement(By.id("username")); 
userElem.click(); 
userElem.clear(); 
userElem.sendKeys(userName); 
// Fill out password 
var passElem = driver.findElement(By.id("password")); 
passElem.click(); 
passElem.clear(); 
passElem.sendKeys(password); 
// Click login button 
driver.findElement(By.id("login")) 
     .click(); 

但是,如果不解决这个问题,我已经在那里了分割字符串,并在同一时间发送键几个已经工作了的情况。 确实有一个性能损失,所以我不会这样做,除非你真的需要。

public void fooTest() { 
    // Do stuff to get to the correct page, etc 
    var username = StaticVariable.username; 
    var password = StaticVariable.password; 
    // Fill out user name 
    var userElem = driver.findElement(By.id("username")); 
    sendKeys(userElem, userName); 
    // Fill out password 
    var passElem = driver.findElement(By.id("password")); 
    sendKeys(passElem, password); 
    // Click login button 
    driver.findElement(By.id("login")) 
      .click(); 
    // do assertions, etc 
} 

private void sendKeys(WebElement elem, String keys) { 
    elem.click(); 
    elem.clear(); 
    for (int i = 0; i < keys.length(); i) { 
     elem.sendKeys(keys.charAt(i)); 
    } 
} 

注:对不起任何语法/ C#的错误,我很少使用的语言......我更熟悉Java ;-)

+0

我试过这个,但是它不工作的结果是一样的,它进入半文本。 – shoaib

0

而不是用“变种”,你可能想尝试放入特定的类型,例如'string'。问题的关键在于传递给.SendKeys()函数或函数如何接收它。

string username = StaticVariable.username; 
string password = StaticVariable.password;