2017-07-19 47 views
0

在下面的代码我不能在密码字段中发送密码键,我试着点击字段,清除字段并发送密钥。但现在在任何方法上工作。但它的工作,如果我调试和测试元素不可交互异常在硒网页自动化

public class TestMail { 
    protected static WebDriver driver; 

    protected static String result; 

    @BeforeClass 

    public static void setup() { 
       System.setProperty("webdriver.gecko.driver","D:\\geckodriver.exe"); 

    driver = new FirefoxDriver(); 

    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 

    } 

    @Test 

void Testcase1() { 

    driver.get("http://mail.google.com"); 

    WebElement loginfield = driver.findElement(By.name("Email")); 
    if(loginfield.isDisplayed()){ 
     loginfield.sendKeys("[email protected]"); 
    } 
    else{ 
    WebElement newloginfield = driver.findElemnt(By.cssSelector("#identifierId"));          
     newloginfield.sendKeys("[email protected]"); 
     // System.out.println("This is new login"); 
    } 


    driver.findElement(By.name("signIn")).click(); 

    // driver.findElement(By.cssSelector(".RveJvd")).click(); 

    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 
// WebElement pwd = driver.findElement(By.name("Passwd")); 
    WebElement pwd = driver.findElement(By.cssSelector("#Passwd")); 

    pwd.click(); 
    pwd.clear(); 
// pwd.sendKeys("123"); 
if(pwd.isEnabled()){ 
    pwd.sendKeys("123"); 
} 
else{ 
    System.out.println("Not Enabled"); 
} 

回答

3

尝试设置一个隐含的等待,也许10秒。

gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

或设置显式等待。显式等待是您定义的代码,用于在继续执行代码之前等待某种条件发生。在你的情况下,它是密码输入字段的可见性。 (感谢ainlolcat的评论)

WebDriver gmail= new ChromeDriver(); 
gmail.get("https://www.gmail.co.in"); 
gmail.findElement(By.id("Email")).sendKeys("abcd"); 
gmail.findElement(By.id("next")).click(); 
WebDriverWait wait = new WebDriverWait(gmail, 10); 
WebElement element = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.id("Passwd"))); 
gmail.findElement(By.id("Passwd")).sendKeys("xyz"); 

说明:原因硒找不到元素是因为密码输入栏的ID是最初的passwd隐藏。点击“下一步”按钮后,Google会首先验证输入的电子邮件地址,然后显示密码输入字段(通过将ID从Passwd-hidden更改为Passwd)。因此,当密码字段仍处于隐藏状态时(即Google仍在验证电子邮件ID),您的网络驱动器将开始搜索密码输入字段,其中ID仍为隐藏。因此,抛出异常。

+0

很好的解释:-)。它按预期工作,非常感谢。 –

1

请尝试选择像这样的密码字段。

WebDriverWait wait = new WebDriverWait(driver, 10); 
    WebElement passwordElement = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#Passwd"))); 
    passwordElement.click(); 
    passwordElement.clear(); 
    passwordElement.sendKeys("123");