sendkeys()无法在selenium webdriver中工作

时间:2017-09-20 16:20:04

标签: java selenium

直到昨天下面提到的代码工作正常,但现在我遇到了一些问题。 代码打开firefox浏览器然后加载facebook.com但代码没有发送 电子邮件和密码到Web浏览器,即sendkeys()不起作用。 我验证了电子邮件和密码的文本框的ID是正确的,但代码不起作用。

import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.WebDriver;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
public class Webdriver2 {

    WebDriver driver ;
    JavascriptExecutor jse;
    public void invokeBrowser()
    {
        try
        {
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.19.0-win64\\geckodriver.exe");
        driver = new FirefoxDriver();
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS );


        driver.get("https://www.facebook.com/");
        search();
        }
        catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }
    public void search()
    {
        try
        {
        driver.findElement(By.id("email")).sendKeys("example@gmail.com"); 
        Thread.sleep(4000);
        driver.findElement(By.id("pass")).sendKeys("password"); 
        Thread.sleep(4000);
        driver.findElement(By.id("u_0_2")).click();
        Thread.sleep(4000);
        /*driver.findElement(By.name("q")).sendKeys("spit mumbai");
        Thread.sleep(4000);
        driver.findElement(By.xpath(" //button[@aria-label='Search' and @data-testid='facebar_search_button'] ")).click();*/

        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Webdriver2 w = new Webdriver2();
        w.invokeBrowser();
    }
}

3 个答案:

答案 0 :(得分:2)

在执行sendKeys之前,请尝试单击两个文本框:

driver.findElement(By.id("email")).click();
driver.findElement(By.id("email")).sendKeys("example@gmail.com");

文本框可能需要关注。

答案 1 :(得分:0)

我们需要在这里处理以下几件事情:

  1. Email or Phone字段位于<input>标记内,因此我们需要在选择定位器时将其考虑在内。
  2. Password字段也在<input>标记内,因此我们需要在选择定位器时将其考虑在内。
  3. 如果您仔细观察id按钮的Log In是动态的,也在<input>标记内,那么我们也需要考虑这个因素。
  4. 以下是使用 cssSelector 访问网址https://www.facebook.com/,最后提供Email or PhonePassword的最小示例代码块点击Log In按钮:

    package demo;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    public class Facebook_Login_CSS_FF {
    
        public static void main(String[] args) {
    
    
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver =  new FirefoxDriver();
            driver.get("https://www.facebook.com/");
            driver.findElement(By.cssSelector("input#email")).sendKeys("Ryusei");
            driver.findElement(By.cssSelector("input[name='pass']")).sendKeys("Nakamura");
            driver.findElement(By.cssSelector("input[value='Log In']")).click();
        }
    
    }
    

答案 2 :(得分:0)

根据浏览器版本检查并查看驱动程序的最新版本。这主要解决了这个问题。