2016-12-07 78 views
1

我正在尝试登录到我的个人资料,但在尝试添加密码时遇到了问题。我可以让光标显示在密码框中,但当试图发送密钥时,它会引发异常。这是否有一些安全原因?密码是否隐藏在html/xml中,以便不会发生自动化?Selenium发送文本到密码字段

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class mainTester { 

static WebDriver driver; 

public static void main(String[] args) throws InterruptedException{ 

    setUp(); 
} 
public static void setUp() throws InterruptedException { 
     // Optional, if not specified, WebDriver will search your path for chromedriver. 
     System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); 

     driver = new ChromeDriver(); 
     driver.get("http://www.google.com/xhtml"); 
    // Thread.sleep(5000); // Let the user actually see something! 
     WebElement searchBox = driver.findElement(By.name("q")); 
     searchBox.sendKeys("C programming forum"); 
     searchBox.submit(); 
     Thread.sleep(5000); 
     driver.findElement(By.linkText("C Board - Cprogramming.com")).click(); 
     Thread.sleep(5000); // Let the user actually see something! 
     WebElement userEnter = driver.findElement(By.name("vb_login_username")); 
     userEnter.sendKeys("myusername"); 
     WebElement userEnter2 = driver.findElement(By.name("vb_login_password_hint")); 
     userEnter2.sendKeys("mypassword"); 
    // searchBox.submit(); 
     Thread.sleep(5000); // Let the user actually see something! 
     System.out.println("Finished"); 
     //driver.quit(); 

    } 

} 

的HTML是像这样

<input type="text" class="textbox default-value" tabindex="102" name="vb_login_password_hint" id="navbar_password_hint" size="10" value="Password" style="display: inline;"> 

,误差

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: cannot focus element 

回答

2

此登录表单是有点棘手,有二级密码输入 - 一个行事像在实际密码字段上显示“提示”。你需要做的是先点击“提示”,然后将密钥发送到真正的密码输入:

WebElement passwordHint = driver.findElement(By.name("vb_login_password_hint")); 
passwordHint.click(); 

WebElement passwordInput = driver.findElement(By.name("vb_login_password")); 
passwordInput.sendKeys("mypassword"); 
+0

真棒,工作。你知道这是为什么吗?这是出于安全目的吗? –

+1

@ scarecrow-是的,看起来像一个简单的对付网络抓取机器人的措施。 – alecxe

相关问题