如何使用Java单击WebDriver中的图像按钮?

时间:2013-04-01 13:39:54

标签: java javascript webdriver selenium-webdriver

按钮类型是图像,附加了HTML代码中的相关代码。我输入了所有数据,然后单击立即申请按钮,它完全没有保存。但是当我尝试手动创建它时,它会在不到15秒的时间内保存。

请找到随附的屏幕截图。 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("abc@abc.com");
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">

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

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

删除所有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类以查看selenium中构建的可用条件,如果它们不能满足您的需求,那么编写自己的预期条件就很简单了。

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

对于记录,此答案是针对下面引用的原始问题(您可以查看原始问题的编辑历史记录以进行验证)。

  

使用Java中的Webdriver

单击“立即应用”按钮后需要很长时间才能保存      

点击“立即应用”按钮后,需要很长时间才能保存   Java中的Webdriver。我输入了所有数据,然后点击了Apply   现在按钮,它根本没有保存。但是当我尝试创造它时   手动,它在不到15秒的时间内保存。请找到   附加屏幕截图。

答案 1 :(得分:0)

这个问题可能有两个原因。

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

  2. 在脚本结束时单击“BtnSubmit”,会话可能会在之后立即过期 你点击那个按钮。使用旧版本和新版本时,通常会发生此问题 selenium独立jar文件。请注意,您只使用最新版本,而不是 除了旧版本。

答案 2 :(得分:0)

使用此,

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

之后,

driver.findElement(By.id("TxtEmailId")).sendKeys("abc@abc.com");

和评论,

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

所以你的代码看起来像,

driver.findElement(By.id("TxtEmailId")).sendKeys("abc@abc.com");
driver.findElement(By.id("TxtEmailId")).sendKeys(Keys.ENTER);
//driver.findElement(By.name("BtnSubmit")).click();

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

更新:

使用您自己的代码并使用以下方法替换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;
    }