2017-07-07 55 views
-1

我有一个for循环,不断循环回网站,填写并提交搜索框与列表中的下一个字符串。Java Selenium循环通过网站sendKeys将字符串组合在一起

例如,如果列表中包含[ABCD,EFGH,IJKL ....],第一环路会发送ABCD,第二循环将发送EFGH等

目前循环发送第一串正确,但是在之后的每个循环中,发送的字符串都被添加到前一个字符串中。所以,而不是在第二个循环,它是abcdefgh。

如何清除密钥以便我可以发送单个字符串?这就是我现在所拥有的:

for(String value : List){ 
     driver.get(Link); 
     Actions actions = new Actions(driver); 
     WebElement input_field = driver.findElement(By.id("txtBoxSearch")); 

     actions.moveToElement(input_field); 
     actions.click();    
     actions.sendKeys(value);    
     actions.build().perform(); 

     WebElement submit_key = driver.findElement(By.xpath("//button[contains(@title, 'Search')]")); 
     actions.moveToElement(submit_key); 

     actions.click(); 
     actions.build().perform(); 
    } 

回答

0

您需要的文本框写入值之前的内容清除它

for(String value : List){ 
    driver.get(Link); 
    Actions actions = new Actions(driver); 
    WebElement input_field = driver.findElement(By.id("txtBoxSearch")); 
    input_field.clear(); 
    actions.moveToElement(input_field); 
    actions.click();    
    actions.sendKeys(value);    
    actions.build().perform(); 
    WebElement submit_key = driver.findElement(By.xpath("//button[contains(@title, 'Search')]")); 
    actions.moveToElement(submit_key); 
    actions.click(); 
    actions.build().perform(); 
} 
+0

我曾尝试过,因为如何格式化搜索栏,我收到线程“AWT-EventQueue-0”org.openqa.selenium.InvalidElementStateException中的异常:无效元素状态:元素必须是用户可编辑的以便清除它。 –

+0

@StevenFang我编辑了代码,'按钮'不能被清除。但'文本框'必须是。请再次检查您的代码,并查看id为“txtBoxSearch”的情况下的html,并且第一个元素具有该键不是可编辑元素。 –

+0

看来,txtBoxSearch是一个formControl,因此诸如发送键,清除和点击等动作必须是.build()。perform(),否则单个动作将是瞬间的,什么也不做。为了解决这个问题,我试图做actions.sendKeys(Keys.CONTROL,“a”,Keys.DELETE),但是这只会给我一个空指针异常。 –

0

这里是回答你的问题:

一旦你调用click()方法通过动作类实例在所需元素上,接下来使用动作类实例到clickAndHold,发送CONTROL A,然后发送新文本DebanjanB到表单控件以覆盖前一个tex t如下:

for(String value : List){ 
    driver.get(Link); 
    Actions actions = new Actions(driver); 
    WebElement input_field = driver.findElement(By.id("txtBoxSearch")); 
    actions.moveToElement(input_field); 
    actions.click(); 
    actions.clickAndHold(input_field).sendKeys(Keys.chord(Keys.CONTROL, "a"), "DebanjanB").build().perform();    
    WebElement submit_key = driver.findElement(By.xpath("//button[contains(@title, 'Search')]")); 
    actions.moveToElement(submit_key); 
    actions.click(); 
    actions.build().perform(); 
} 

让我知道这个答案是否是您的问题。

+0

谢谢,这似乎工作。 –