【问题标题】:Unable to enter text into text fields using WebDriver无法使用 WebDriver 在文本字段中输入文本
【发布时间】:2017-09-19 19:12:23
【问题描述】:

我正在尝试在两个文本字段中输入文本,并且我尝试了几乎所有元素定位器、Javascript 技巧,但文本只是没有输入到字段中。测试通过,但我可以看到没有输入任何文本。

我练习的网站是https://www.chegg.com/auth?action=login&redirect=http%3A%2F%2Fwww.chegg.com%2F&reset_password=0

这两个字段是电子邮件和密码字段。

这应该可以,但不能,提供代码的 sn-p:

WebElement emailField = driver.findElement(By.name("email"));

WebElement passwordField = driver.findElement(By.name("password"));

emailField.sendKeys("whatever");

passwordField.sendKeys("whatever");

我做错了什么?

【问题讨论】:

  • 使用 By.name 策略,将返回第一个 name 属性值与位置匹配的元素。建议您使用 xpath 进行更精确的测试以及在测试中执行一些事件,以便只要输入文本,您就会知道成功或失败与测试无关

标签: java selenium-webdriver sendkeys


【解决方案1】:

实际上,在您提供的website 中,使用By.name() 定位器存在两个元素,其中第一个是不可见的,第二个是可见的,并且您正在与页面上不可见的第一个元素进行交互。这就是你遇到麻烦的原因,你应该尝试一些不同的定位器来定位正确的元素,我建议你尝试使用By.cssSelector(),如下所示:-

WebElement emailField = driver.findElement(By.cssSelector(".C-common-auth-signin-component input[name = 'email']"));
emailField.sendKeys("whatever");

WebElement passwordField = driver.findElement(By.cssSelector(".C-common-auth-signin-component input[name = 'password']"));
passwordField.sendKeys("whatever"); 

【讨论】:

    【解决方案2】:

    您无法找到的原因是定位器有多个匹配项。尝试像这样查找:

    WebElement emailField = driver.findElement(By.xpath("//div[@id='eggshell-7']//input[@name='email']")).sendKeys("whatever");
    

    如果您仍然无法发送,请尝试在sendkeys 之前发送clear()

    【讨论】:

    • 不,这个xpath 不起作用,因为div id 正在动态变化...:)
    • 如果它发生变化,那么我们可以尝试使用 contains 进行部分匹配,看起来文本框是第一个匹配项,所以它是: (//div[contains(@id,'eggshell-' )]//输入[@name='email'])[1]
    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多