2013-04-01 83 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

相關問題