SeleniumTwitterJava
我正在尝试使用SeleniumWebDriver连接到我的twitter帐户SeleniumTwitterJava,java,selenium,twitter,Java,Selenium,Twitter,我正在尝试使用SeleniumWebDriver连接到我的twitter帐户 WebDriver driver = new FirefoxDriver(); driver.get("https://www.twitter.com/login/"); WebElement formElement = driver.findElement(By.cssSelector("form.signin")); List<WebElement> allFormChildElements = fo
WebDriver driver = new FirefoxDriver();
driver.get("https://www.twitter.com/login/");
WebElement formElement = driver.findElement(By.cssSelector("form.signin"));
List<WebElement> allFormChildElements = formElement.findElements(By.cssSelector("input"));
for(WebElement item : allFormChildElements )
{
System.out.println("<"+item.getTagName()+"> "+ item.getAttribute("name") );
switch(item.getAttribute("name")) {
case "session[username_or_email]":
item.sendKeys(username);
break;
case "session[password]":
item.sendKeys(password);
break;
}
}
WebDriver=newfirefoxdriver();
驱动程序。获取(“https://www.twitter.com/login/");
WebElement formElement=driver.findElement(By.cssSelector(“form.signin”);
列出所有FormChildElements=formElement.findElements(按.cssSelector(“输入”));
for(WebElement项:allFormChildElements)
{
System.out.println(“+item.getAttribute(“名称”));
开关(item.getAttribute(“名称”)){
案例“会话[用户名或电子邮件]”:
item.sendKeys(用户名);
打破
案例“会话[密码]”:
项。发送密钥(密码);
打破
}
}
但是我得到了这个错误日志:
<input> session[username_or_email]
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
Command duration or timeout: 38 millisecon
会话[用户名或电子邮件]
线程“main”org.openqa.selenium.ElementNotVisibleException中的异常:元素当前不可见,因此可能无法与之交互
命令持续时间或超时:38毫秒
ds
我不明白,因为它正在打印输入的名称,为什么不可见?
有什么想法吗
感谢通过检查twitter登录页面的DOM,发现有两个表单具有几乎相同的属性,并找到三个用户名和密码字段。这就是为什么您会得到
ElementNotVisibleException
[参见图片]
因此,您必须使用相对xpath或css选择器,或者为此实现一个逻辑
我不知道为什么要遍历所有输入字段,然后通过检查其属性来查找元素。只需调用driver.findelelements(by.name())
相对Xpath
当我发现@class
签名包装器中的输入是可见的时,我选择了这个xpath
driver.get("https://twitter.com/login/");
driver.findElement(By.xpath("//div[@class='signin-wrapper']//input[@name='session[username_or_email]']")).sendKeys("viaxpath");
driver.findElement(By.xpath("//div[@class='signin-wrapper']//input[@name='session[password]']")).sendKeys("viaxpath");
获取可见元素
顾名思义,它将查找所有元素并返回仅可见的元素
driver.get("https://twitter.com/login/");
getVisibleElement(driver, "session[username_or_email]").sendKeys("viavisibleName");
getVisibleElement(driver, "session[password]").sendKeys("viavisibleName");
public static WebElement getVisibleElement(WebDriver driver, String name) {
List<WebElement> elements = driver.findElements(By.name(name));
for (WebElement element : elements) {
if (element.isDisplayed()) {
return element;
}
}
return null;
}
driver.get(“https://twitter.com/login/");
getVisibleElement(驱动程序,“会话[用户名或电子邮件]”)。sendKeys(“viavisibleName”);
getVisibleElement(驱动程序,“会话[密码]”).sendKeys(“viavisibleName”);
公共静态WebElement getVisibleElement(WebDriver驱动程序,字符串名称){
列表元素=driver.findElements(By.name(name));
for(WebElement:elements){
if(element.isDisplayed()){
返回元素;
}
}
返回null;
}