硒发现元素

时间:2014-08-22 10:57:52

标签: java selenium

我正在尝试找到该元素,但我收到了错误 这是我的代码:

    driver.get(baseURL);
    driver.manage().timeouts().implicitlyWait(10 ,TimeUnit.SECONDS);
    driver.manage().window().maximize();
    //String parentHandle=driver.getWindowHandle();
    driver.findElement(By.linkText("Create Account")).click();
    System.out.println(driver.getCurrentUrl());

    //String currentWindow=driver.getWindowHandle();
    //driver.switchTo().window(currentWindow);
    //String currentURL=;
    //(currentURL);

    for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle); // switch focus of WebDriver to the next found window handle (that's your newly opened window)
    }

    driver.findElement(By.xpath("//html/body/div/div[1]/div[1]/div/div/form/div[1]/input")).sendKeys("9051902811");


    driver.close();
    //driver.switchTo().window(parentHandle);

    }
    catch(NoSuchElementException nsee){
        System.out.println(nsee.toString());
  }

    System.exit(0);
}

我得到了例外:

无法找到元素“method”:“xpath”,“selector”:“// html / body / div / div [1] / div [1] / div / div / form / div [1] / input “}命令持续时间或超时:89毫秒

请帮忙......

1 个答案:

答案 0 :(得分:0)

根据您所展示的内容,很难准确说明问题所在。这可能是几件不同的事情。

1)元素是否存在?如果你显示html,这可以很快回答。

Xpath非常脆弱,非常容易出错。 尝试使用不同的选择器,如果可能的话,id和class更可靠。 这是By类的链接。

driver.findElement(By.id("id")).sendKeys("keys");
driver.findElement(By.className("className")).sendKeys("keys");

更具体的东西,当添加内容改变结构时,它不会破坏测试,xpath肯定会使你的测试变得脆弱。


2)输入框是否已加载?

Selenium有时会尝试找到尚未加载的元素。 Explicit Waits将有助于解决此问题,您可以将这些等待与ExpectedConditions一起使用,以等待元素可见,可点击,不可见等等。 使用thread.sleep,除非没有其他选择(可能存在)。

以下代码可用于等待元素可见。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


WebDriverWait wait = new WebDriverWait(driver, seconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
            .xpath(xpath)));

您可以使用它来确保xpath可以看到元素,但是如果可能的话,您应该考虑使用不同的选择器,这个选择器不会让您的测试非常明显。如果元素没有id / class,则可以将xpath锚定到更可靠的选择器,以减少一些脆弱性。 如果您提供HTML,我将很乐意提供更多信息。