-4

按钮类型为图片,并附上HTML代码中的相关代码。我已经输入了所有数据并单击了立即应用按钮,它根本没有保存。但是当我尝试手动创建它时,它会在不到 15 秒内保存。

请找到随附的屏幕截图。快速应用程序.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">

任何帮助将不胜感激。

4

3 回答 3

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 单击“立即应用”按钮后需要很长时间才能保存。我已经输入了所有数据并单击了立即应用按钮,它根本没有保存。但是当我尝试手动创建它时,它会在不到 15 秒内保存。请找到随附的屏幕截图。

于 2013-04-01T15:34:41.850 回答
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;
    }
于 2013-04-03T13:14:40.247 回答
0

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

  1. 一个来自“立即应用”按钮的 HTML 代码,我可以看到它显示为“input id='BtnSubmit'”,但在您的脚本中它写为 'driver.findElement(By.name("BtnSubmit")) 。点击();'。不应该是"driver.findElement(By.id("BtnSubmit")).click()"吗?'name' 必须替换为 'id'。

  2. 在脚本结束时单击“BtnSubmit”,单击该按钮后会话可能会立即过期。当您使用新旧版本的 selenium 独立 jar 文件时,通常会出现此问题。请注意您仅使用最新版本,而不是旧版本的补充。

于 2013-04-02T07:24:49.550 回答