Java sendKeys()方法未发送密钥
下面提到的是我的代码,它没有将键发送到文本框,但是当光标在文本框中不断闪烁时,它会找到正确的元素Java sendKeys()方法未发送密钥,java,selenium,Java,Selenium,下面提到的是我的代码,它没有将键发送到文本框,但是当光标在文本框中不断闪烁时,它会找到正确的元素 public class cl01 { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\Program Files\\Java\\geckodriver-v0.14.0-win32\\geckodriver.exe"); WebDriver driver
public class cl01 {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","C:\\Program Files\\Java\\geckodriver-v0.14.0-win32\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("http://www.rediff.com/");
String P1 = driver.getWindowHandle();
System.out.println(P1);
Set<String> windows = driver.getWindowHandles();
Iterator<String> W = windows.iterator();
while(W.hasNext())
{
String C1 = W.next();
System.out.println(C1);
if(!P1.equalsIgnoreCase(C1))
{
driver.switchTo().window(C1).close();
}
}
driver.switchTo().window(P1);
System.out.println("web page opened");
//Browser's position is set
driver.manage().window().setPosition(new Point(30, 40));
int height = driver.manage().window().getSize().getHeight();
System.out.println( "height of the browser is " +height);
int width = driver.manage().window().getSize().getWidth();
System.out.println("width of the browser is " +width);
driver.manage().window().maximize();
driver.findElement(By.linkText("Create a Rediffmail account")).click();
System.out.println("sign up link opened");
driver.findElement(By.xpath(".//*[@id='wrapper']/table[2]/tbody/tr[3]/td[3]/input")).sendKeys("ABC");
公共类cl01{
公共静态void main(字符串[]args){
System.setProperty(“webdriver.gecko.driver”、“C:\\Program Files\\Java\\geckodriver-v0.14.0-win32\\geckodriver.exe”);
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.rediff.com/");
字符串P1=driver.getWindowHandle();
系统输出打印LN(P1);
设置windows=driver.getWindowHandles();
迭代器W=windows.Iterator();
while(W.hasNext())
{
字符串C1=W.next();
系统输出打印LN(C1);
如果(!P1.等信号情况(C1))
{
驱动程序。切换到()。窗口(C1)。关闭();
}
}
驱动程序切换到()窗口(P1);
System.out.println(“打开的网页”);
//浏览器的位置已设置
driver.manage().window().setPosition(新点(30,40));
int height=driver.manage().window().getSize().getHeight();
System.out.println(“浏览器的高度为”+高度);
int width=driver.manage().window().getSize().getWidth();
System.out.println(“浏览器的宽度为”+宽度);
driver.manage().window().maximize();
driver.findElement(By.linkText(“创建一个Rediffmail帐户”)。单击();
System.out.println(“注册链接打开”);
driver.findElement(By.xpath(“./*[@id='wrapper']]/table[2]/tbody/tr[3]/td[3]/input”).sendKeys(“ABC”);
我觉得代码很好。可能加载速度慢,需要为第一个元素添加等待
在这种情况下,我会避免使用XPath,特别是当嵌套层很深并且依赖索引时。这会造成非常脆弱的定位器。我会使用如下CSS选择器
By.cssSelector("input[name^='name']")
我对此进行了测试,它对我起了作用。它基本上是在寻找一个INPUT
标记,该标记的名称以“name”开头。该名称以自动生成的字符串结尾,但这部分在页面上是唯一的
这里有一些学习CSS选择器的参考资料。CSS选择器真的很强大,学习它们是值得的
您将密钥发送到哪里?在您的代码中找不到。啊,刚在结尾看到它。我认为您只是使用了错误的元素,您只认为它是正确的元素。sendKeys多年来一直运行非常稳定。我猜您对应该发生的事情的解释是错误的。代码完全按照我理解的那样运行。您正在尝试访问rediff、 你能给我提供HTML DOM吗?这样我就可以帮助你了。请更新问题中的DOM。我使用了带有显式等待的xpath方法,但不知道为什么这个xpath不起作用,即使xpath是正确的。我使用了以下代码:
WebDriverWait wait wait=new WebDriverWait(driver,15);wait.untill(ExpectedConditions.elementtobelickable(driver.findelelement(By.xpath(//table/.//following::tr/td/input[@name='name9e6f78ab']));driver.findelelement(By.xpath(//table/.//following::tr/td/input[@name='name9e6f78ab'])));sendKeys(“ABC”);
当我执行代码时,它对我来说工作正常。:)你能建议我从哪里学习cssSelector
?`如果你觉得这个(或任何)答案有帮助,请投上一票。如果这回答了你的问题,请将其标记为已接受的答案。谢谢!