2013-04-01 39 views
-4

按钮类型是图片,并附上HTML代码中的相关代码。我已输入所有数据并单击立即申请按钮,它完全不能保存。但是,当我尝试手动创建它时,它会在不到15秒的时间内保存。如何使用Java在WebDriver中单击图像按钮?

请查看附件截图。 QuickApplication.jpg

为同相关的代码:对于现在申请按钮

//Navigating to Quick Application 
driver.get(QAurl); 
Thread.sleep(15000); 
driver.findElement(By.id("DdlSalesPerson")).sendKeys("Swamy m Kumara"); 
driver.findElement(By.id("TxtFName")).sendKeys("Kumar"); 
driver.findElement(By.id("TxtLName")).sendKeys("Swamy"); 
driver.findElement(By.id("TxtAddress")).sendKeys("434, Main Road, Somajiguda"); 
driver.findElement(By.id("TxtZip")).sendKeys("79081"); 
driver.findElement(By.id("TxtSSN1")).sendKeys("881"); 
Thread.sleep(15000); 
driver.findElement(By.id("TxtSSN2")).sendKeys("72"); 
driver.findElement(By.id("TxtSSN3")).sendKeys("4365"); 
Thread.sleep(5000); 
driver.findElement(By.id("TxtDayPhone1")).sendKeys("963"); 
driver.findElement(By.id("TxtDayPhone2")).sendKeys("210"); 
driver.findElement(By.id("TxtDayPhone3")).sendKeys("5478"); 
Thread.sleep(5000); 
driver.findElement(By.id("ChkIAgree")).click(); 
driver.findElement(By.id("TxtSignature")).sendKeys("Kumar Swamy"); 
Thread.sleep(5000); 
System.out.println("Entered all the required fields"); 
//Reading the value in the image. 
WebElement element = driver.findElement(By.id(OR.getProperty("FP_SImg_ID"))); 
String src = ((JavascriptExecutor)driver).executeScript("return arguments[0].attributes['src'].value;", element).toString(); 
img =src.split("="); 
System.out.println("Value retrieved from the Image source: "+img[1]); 
driver.findElement(By.id(OR.getProperty("FP_TxtSImg_ID"))).sendKeys(img[1]); 
Thread.sleep(5000); 
driver.findElement(By.id("TxtEmailId")).sendKeys("[email protected]"); 
driver.findElement(By.name("BtnSubmit")).click(); 
Thread.sleep(35000); 
System.out.println("Successfully Applied from the QuickApp"); 

HTML代码:

<input id="BtnSubmit" type="image" style="height:33px;width:121px;border-width:0px;" 
onclick="javascript:return validateControls();" src="../Common/Images/HybridQA 
/apply_now.png" title="Submit Here" tabindex="45" name="BtnSubmit"> 

任何帮助将不胜感激。

+0

您是如何测量保存时间的?当你点击按钮并且硒得到回应后,你的代码就会再次坐在那里35秒,然后它可以再次做任何事情。是什么让你确信Thread.sleep()不会导致额外的等待时间? – Ardesco

+0

我已经给了一些时间来等待保存/提交应用程序。它没有在给定的时间内保存/提交。我无法保存它,因为按钮类型是图片,您可以在HTML代码中看到它。 –

回答

3

你有Thread.sleep()方法的代码)1分25秒...

删除所有Thread.sleep代码(如果你正在等待元素出现做正确,使用一个明确的等待:

http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

采取从页面的例子上面链接:

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid"))); 

查看ExpectedConditions类以查看硒中的可用条件,如果它们不能满足您的需求,那么编写您自己的预期条件就很简单了。

------------------- -------------------编辑

此答案适用于被问及以下引用的原始问题(您可以查看原始问题的编辑历史来验证此问题)。

需要长时间点击立即应用在Java中

使用webdriver的考虑很长一段时间点击立即申请使用Java中 webdriver的按钮后,保存按钮后保存。我输入了所有的数据并点击Apply now按钮,它根本就没有保存。但是当我尝试手动创建 时,它会在不到15秒的时间内保存。请找到 附加屏幕截图。

+0

感谢您的回复,但问题不在于Thread.sleep()方法。在这里我问了一下这个问题。点击立即应用按钮后,它不会保存细节并提交报告。我用等待脚本与应用程序同步。 –

+0

我在编辑之前回答了您的原始问题。你的新问题是完全不同的。使用明确的等待来确保图像在你点击它之前仍然是你应该做的事情。 – Ardesco

0

可能有2个原因导致此问题。

  1. 一个是从“立即申请”按钮的HTML代码,我可以看到它显示为“输入 ID =‘btnSubmit按钮’”,但在你的脚本的写作 “driver.findElement( 。By.name( “btnSubmit按钮”))点击();”。 不应该是“driver.findElement(By.id(”BtnSubmit“))。click()”? 'name'必须是 替换为'id'。

  2. 在脚本结尾处单击“BtnSubmit”,会话可能会在 后立即过期,然后单击该按钮。当您使用硒独立jar文件的旧版本和新版本 时,通常会出现此问题。请参阅您只使用最新版本,而不是在旧版本中使用 。

+0

感谢您的回复。关于你的第一点。它可以是任何'driver.findElement(By.name(“BtnSubmit”))。click();'或'driver.findElement(By.id(“BtnSubmit”))。click();'。因为ID和Name属性的属性值相同。请参阅相关的HTML代码。 –

+0

关于第二点,我只使用了Selenium Standalone jar文件版本2.21.0的1个版本。当我发现最新版本的selenium独立jar文件时出现了一些问题。 –

+0

是的你的权利...看到你的HTML的第一部分。 – Sharon

0

使用此,

driver.findElement(By.id("TxtEmailId")).sendKeys(Keys.ENTER); 

在此之后,

driver.findElement(By.id("TxtEmailId")).sendKeys("[email protected]"); 

和评论,

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

所以,你的代码看起来像,

driver.findElement(By.id("TxtEmailId")).sendKeys("[email protected]"); 
driver.findElement(By.id("TxtEmailId")).sendKeys(Keys.ENTER); 
//driver.findElement(By.name("BtnSubmit")).click(); 

有时很难处理图像按钮,因为这些按钮在所有必填字段输入时都会激活。确保填写了所有必填字段,并在输入表格中的最后一个字段后按回车。首先尝试手动进行。而不是点击按钮,在最后的输入字段中输入并使用与自动化相同的策略。

更新:

使用自己的代码和替换Thread.sleep()方法下面的方法。

这样称呼它,

waitForElementToBePresent(By.id("DdlSalesPerson"), 15000); 

它等待下一次无论你传递作为参数元素。如果找到则返回true,否则返回false。如果在给定时间内找到元素,它将立即返回true,而不是等待给定的时间。

public boolean waitForElementToBePresent(By by, int waitInMilliSeconds) throws Exception 
    { 
     WebDriver driver = getDriver(); 
     int wait = waitInMilliSeconds; 
     int iterations = (wait/250); 
     long startmilliSec = System.currentTimeMillis(); 
     for (int i = 0; i < iterations; i++) 
     { 
      if((System.currentTimeMillis()-startmilliSec)>wait) 
       return false; 
      List<WebElement> elements = driver.findElements(by); 
      if (elements != null && elements.size() > 0) 
       return true; 
      Thread.sleep(250); 
     } 
     return false; 
    } 
+0

感谢您的回复。我使用脚本和手动尝试了你的答案。它没有奏效。这是一个Onclick =按钮提交事件。 –

+0

看到我的更新,并用您自己的代码尝试。 – user2087450

相关问题