C# Selenium在文本框中输入无效文本(半文本)

C# Selenium在文本框中输入无效文本(半文本),c#,selenium,selenium-webdriver,nunit,automated-tests,C#,Selenium,Selenium Webdriver,Nunit,Automated Tests,在运行多个测试用例时,selenium输入了无效文本,如附件所示。 以下是显示错误的两个示例: 它没有输入AutomationTest123_6035633258972,而是只输入6035633258972 它没有进入AutomationTest123_636010703068635512,而是 进入AutomationTest123_636010703068635512 代码 //StaticVariable is class which has static values va

在运行多个测试用例时,selenium输入了无效文本,如附件所示。 以下是显示错误的两个示例:

  • 它没有输入AutomationTest123_6035633258972,而是只输入6035633258972
  • 它没有进入AutomationTest123_636010703068635512,而是 进入AutomationTest123_636010703068635512
    代码

       //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();
    

    有人能帮我吗?任何帮助都将不胜感激。

    使用
    clear
    方法,然后键入文本:
    driver.findelelement(By.cssSelector(“”.clear();


    这可能会有帮助。

    首先要确保

    var username = StaticVariable.username;
    
    正在指定正确的值。 使用

    检查分配后用户名的值

    然后尝试使用以下代码:

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

    我认为这可能是一个问题,可能有几个原因。我首先尝试清除文本输入,确保它有焦点

    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));
        }
    }
    
    public void fooTest(){
    //做一些事情以到达正确的页面,等等
    var username=StaticVariable.username;
    var password=StaticVariable.password;
    //填写用户名
    var userElem=driver.findElement(By.id(“用户名”);
    sendKeys(userElem,用户名);
    //填写密码
    var passElem=driver.findElement(By.id(“密码”);
    sendKeys(passElem、password);
    //单击登录按钮
    driver.findElement(By.id(“登录”))
    。单击();
    //做断言等
    }
    私有void发送键(WebElement元素、字符串键){
    元素单击();
    元素清除();
    for(int i=0;i

    注意:很抱歉出现语法/c#错误,我几乎没有使用过这种语言…我对Java更熟悉;-)

    与其使用“var”,不如尝试输入特定类型,例如“string”。问题必须是传递给.SendKeys()的内容或函数如何接收它

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

    你能分享你的自动化代码吗?@selva已经更新了代码。为了确定,您是否已将StaticVariable.username输出到日志中,以确保问题不在其他地方?@Nibb StaticVariable.username的输出在日志中给出了正确的值。您是否能够在应用程序中手动输入用户名和密码的相同文本而不使用Selenium?只是为了确保你的应用程序没有修剪这些字符!!请确保将代码格式化为代码,以便更易于识别和正确格式化。您可以阅读编辑/格式化帮助主题,但对于代码来说,最简单的方法是在代码前面加上4个空格。@Arun我尝试了这个方法,但结果是一样的,它输入了一半文本值。您知道要运行此代码,您要将页面刮三次吗?如果要使用元素2次或更多次,只需将其存储在变量中并引用即可。它不仅使执行更快,而且更易于维护。如果该ID发生更改,您将不得不在3个位置更新它。@noor我尝试了这个,但它不起作用结果是相同的,它输入了半个文本。@JeffC是的,明白了。我尝试了这个,但它不起作用结果是相同的,它输入了半个文本。
    string username = StaticVariable.username;
    string password = StaticVariable.password;