【问题标题】:At sign (@) is not being entered when I use Selenium使用 Selenium 时未输入符号 (@)
【发布时间】:2018-09-05 08:21:17
【问题描述】:

我一直在尝试练习 Selenium,但由于电子邮件验证,我无法测试注册功能,但每次我运行测试时,它都会输入除“@”符号之外的所有内容,显然这是一个必需的字符. 这是网站,我一直在测试 -> http://a.testaddressbook.com/ (对不起,如果搞砸了,这是我第一次在这里发帖)

预期结果: yolo@test.com(将显示在电子邮件输入字段中)

实际结果: yolotest.com without "@"

步骤定义文件(它的重要部分): StepDef.java

以及引用步骤定义文件的页面: SignUp.java

编辑:我从 Eclipse 开始,然后改用 IntelliJ(希望这只是 IDE 设置问题,但不值得一试)。 我还尝试添加“@”符号的unicode,它仍然没有输入“@”。

按照要求,您可以在下面找到代码的 sn-ps: SignUp.java(页面)

package Pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;

public class SignUp {

    @FindBy(id = "user_email")
    private WebElement userName;

    @FindBy(id = "user_password")
    private WebElement userPass;


    public void credentials(WebDriver driver) {
        Actions cred = new Actions(driver);
        cred.click(userName).sendKeys("yolo@test.com").perform();
        cred.click(userPass).sendKeys("Batman").perform();
    }
}

StepDef.java(步骤定义文件)

@Then("^I fill out fields with information$")
public void i_fill_out_fields_with_information() throws Throwable {
    SignUp filldetails = PageFactory.initElements(driver, SignUp.class);
    filldetails.credentials(driver);
    Thread.sleep(2000);
}

编辑(建议代码):

package com.qa.quickstart.Bookthing;

import static org.junit.Assert.*;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class TestThing {


    ChromeDriver driver;
    String url="http://a.testaddressbook.com/sign_in";


    @Test
    public void test() throws InterruptedException {
         System.setProperty("webdriver.chrome.driver", "C:\\Users\\Laptop\\eclipse-workspace\\chromedriver.exe");
         driver = new ChromeDriver();
         driver.manage().window().maximize();
         driver.get(url);


         WebDriverWait wait = new WebDriverWait(driver, 50);
         driver.findElement(By.linkText("Sign up")).click();
         WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@value='Sign up']")));
         WebElement email = wait.until(ExpectedConditions.elementToBeClickable(By.id("user_email")));
         email.sendKeys("apple@test.com");
         WebElement pass = wait.until(ExpectedConditions.elementToBeClickable(By.id("user_password")));
         pass.sendKeys("banana");

         Thread.sleep(15000);
    }

}

【问题讨论】:

  • 以文本形式发布您的代码,而不是发布屏幕截图。它将提高问题的可读性和可搜索性。
  • 我怀疑字符集有问题。使用的默认字符集是什么?
  • 是的,正在使用默认字符集,我什么都没碰。事实上,我最近才安装了这些 IDE(Eclipse、IntelliJ)。
  • 以防万一,我查了一下,它是默认字符集(Cp1252)

标签: selenium automated-tests email-validation


【解决方案1】:

我尝试了下面的代码,它运行良好。

@Test(enabled=true)
public void loginTry() throws InterruptedException {
    driver.get("http://a.testaddressbook.com/sign_in");
    WebDriverWait wait = new WebDriverWait(driver, 50);
    wait.until(ExpectedConditions.elementToBeClickable(By.id("sign-in")));
    driver.findElement(By.linkText("Sign up")).click();
    WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@value='Sign up']")));
    WebElement email = wait.until(ExpectedConditions.elementToBeClickable(By.id("user_email")));
    email.sendKeys("yolo@test.com");
    WebElement pass = wait.until(ExpectedConditions.elementToBeClickable(By.id("user_password")));
    pass.sendKeys("somepassword");
    Thread.sleep(15000);

}

【讨论】:

  • 不,不幸的是,它没有工作:/仍然是相同的结果(它不输入“@”)此时,我开始认为这不是代码问题。
  • 但是当我尝试在电子邮件代码中输入@。是否可以共享完整的端到端代码,我可以调试一次。谢谢。因为独立代码正在工作。只需检查一次...
  • 我编辑了我的帖子。本质上,我使用了与您相同的代码。 (我做了一些小改动,因为 driver.get("link") 向我显示了一个错误,除此之外它几乎相同),感谢您的尝试。 (这应该有效,但由于某种原因它没有输入@符号)
【解决方案2】:

有趣的是,我设法解决了这个问题!

在解决之前,我:

  • 我使用 Linux VM 并使用相同的代码。我发现我的代码确实有效。因此,我开始认为我的计算机上的某些东西不允许 Selenium 写入“@”。
  • 卸载/重新安装谷歌浏览器
  • 更改了键盘布局(默认是英文,但它也有一个匈牙利布局作为选项,后来我决定重新安装它,解决方案没有对其进行任何更改,默认仍然是英文)

但是,显然解决方案是 Key.Chord! 一个例子:

email.sendKeys(Keys.chord(Keys.ALT, "batman@msn.com"));

email.sendKeys(Keys.chord("robin@msn.com"));

它不专业,但它仍然有效。我还发现,在此解决方案之后,我的原始代码有效。所以,我可以坚持下面的代码:

email.sendKeys("apple@test.com");

简而言之,如果你也有类似的情况,那就试试Key.Chord吧! (然后尝试您的原始代码)

【讨论】:

  • 我遇到了同样的问题。匈牙利语键盘也检查出来:)。但是,Keys.chord()(或者更确切地说,将 Keys.Null 添加到字符串的末尾,因为这似乎是这样做的,但 .NET 库中没有 chord() 方法)没有帮助。我再看看。
猜你喜欢
  • 2010-12-01
  • 2018-09-21
  • 2021-08-06
  • 1970-01-01
  • 2018-11-24
  • 2012-12-02
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
相关资源
最近更新 更多