-1

ボタンをクリックしようとしたアプリケーションがあり、代わりに新しいユーザーフォームに入力するためのウィンドウがポップアップします。これは、いくつかの入力フィールドと「保存」および「キャンセル」ボタンがあるため、実際にはポップアップ ウィンドウとは異なります。Facebookのポップアップウィンドウに似ています。

ここで私が試したコード

Set beforePopup = driver.getWindowHandles();
    driver.findElement(By.xpath("/html/body/div/div/div/div[3]/div/div[2]/div[2]/table/tbody/tr/td[3]/table/tbody/tr/td[2]/em/button")).click();
    driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
    Set afterPopup = driver.getWindowHandles();
    afterPopup.removeAll(beforePopup);
    if(afterPopup.size() == 1) {
          driver.switchTo().window((String)afterPopup.toArray()[0]);
        }

    //driver.switchTo().window("Add New User");
    //selenium.type("userDetailsBean.firstName","alan1");
    //WebElement btnStartQueryInside = driver.findElement(By.xpath("//html/body/div[14]/div/div/div/div/span"));
    //btnStartQueryInside.getText();
    System.out.println(driver.getTitle());
    WebElement firstName = driver.findElement(By.xpath("/html/body/div[2]/div/div/div/div/div/form/div/div/input"));
    firstName.sendKeys("alan1");



    //driver.switchTo().alert();
    //driver.findElement(By.xpath("//html/body/div[14]/div/div/div/div")).getText();
    //WebElement firstName=driver.findElement(By.xpath("/html/body/div[2]/div/div/div/div/div/form/div/div/input"));
    //firstName.sendKeys("alan1");
    /*WebElement lastName=driver.findElement(By.id("userDetailsBean.lastName"));
    lastName.sendKeys("harper");
    WebElement emailadd=driver.findElement(By.id("userDetailsBean.userEmail"));
    emailadd.sendKeys("alan1@derik.com");
    WebElement username=driver.findElement(By.id("userDetailsBean.userName"));
    username.sendKeys("xalan1");
    WebElement password=driver.findElement(By.id("adminPassword"));
    password.sendKeys("Derik123");
    WebElement repassword=driver.findElement(By.id("adminPassword2"));
    repassword.sendKeys("Derik123");
    driver.findElement(By.xpath("//html/body/div[2]/div/div/div/div/div[2]/div/div/table/tbody/tr/td/table/tbody/tr/td[2]/em/button")).click();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);*/

コードでは、最初のフィールドだけで機能するように最初に考えたので、いくつかの入力フィールドの入力についてコメントしたことに注意してください。続行する方法を教えてください。

問題は、ポップアップ ボタンをクリックした後です。コントロールがポップアップ ウィンドウに切り替わるかどうかはわかりません。ポップアップ後の gettitle は、メイン ウィンドウのタイトルを示します。xpathまたはidを使用して最初の入力フィールドを見つけることができません。

4

1 に答える 1

2

Selenium でのこの用語windowは、フレームや単なる div ではなく、実際のブラウザー ウィンドウを意味します。したがって、あなたの論理は間違っており、あなたが求めているgetWindowHandles()ものでdriver.switchTo().window("Add New User")はありません。

必要なのはdriver.switchTo().frame().

driver.switchTo().defaultContent(); // optional, use only if driver is already in an iframe

WebElement editUserForm = driver.findElement(By.cssSelector("iframe[src*='editUserForm']"));
// there are other overloads (by frame name, index, id) and locators can be used here.
driver.switchTo().frame(editUserForm);

// make sure your locator here is correct
WebElement lastName = driver.findElement(By.id("userDetailsBean.lastName")); // I doubt this is correct
// from your screenshot, I'd suggest By.cssSelector("[id*='userDetailsBean.lastName'] input")
lastName.sendKeys("harper");

また、親切に頭を上げてください、あなたのコードはにおいがします。

  • ImplicitlyWait の待機の使用法が間違っているようです。ドキュメント投稿をお読みください。

  • どこで手に入れましたselenium.type("userDetailsBean.firstName","alan1");か?別の場所から行をコピーしただけですか?これは私にはSelenium RCのように見えます。

  • なぜdriver.switchTo().alert()ですか?これが何のためにあるのかについてのドキュメントを読みましたか?
  • 絶対 xpath を使用しないでください。
  • 実際のプロジェクトでそれを行っていない場合は、ページ オブジェクトを使用してみてください。(ここで問題を説明したいだけなら問題ありません)
于 2013-05-17T22:02:57.107 に答える