-4

ボタンの種類は画像で、関連するコードを 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">

どんな助けでも大歓迎です。

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 クラスを見て、セレンに組み込まれている利用可能な条件を確認してください。それらがニーズを満たさない場合は、独自の予想される条件を書くのは簡単です。

- - - - - - - - - -編集 - - - - - - - - - -

記録のために、この回答は、以下に引用されている元の質問に対するものです (元の質問の編集履歴を見て、これを確認することもできます)。

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 キーを押します。まずは手動でやってみてください。ボタンをクリックする代わりに、最後の入力フィールドで 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

この問題には 2 つの理由が考えられます。

  1. 1 つは「Apply Now」ボタンの HTML コードからのもので、「input id='BtnSubmit'」と表示されていることがわかりましたが、スクリプトでは「driver.findElement(By.name("BtnSubmit"))」と書かれています。 。クリック();'。"driver.findElement(By.id("BtnSubmit")).click()" ではないでしょうか?; 「名前」は「id」に置き換える必要があります。

  2. スクリプトの最後で [BtnSubmit] をクリックすると、そのボタンをクリックした直後にセッションが期限切れになることがあります。この問題は通常、Selenium スタンドアロン jar ファイルの古いバージョンと新しいバージョンを使用する場合に発生します。古いバージョンに加えてではなく、最新バージョンのみを使用するようにしてください。

于 2013-04-02T07:24:49.550 に答える