如何使用Selenium WebDriver在网页上选择2个元素?

时间:2013-03-19 07:03:08

标签: java selenium

我正在网页上运行测试,该网页可能有也可能没有某个元素。 程序如下:我填写表格,然后点击“搜索”按钮。当浏览器打开一个新网址时,我需要选择一个element_1,但如果它不存在,我必须选择element_2。

WebElement element = driver.findElement(By.xpath("//....")) || driver.findElement(By.xpath("//..."));
element.click();

//这不是诀窍,还有其他办法吗?是不是可以尝试并抓住?

6 个答案:

答案 0 :(得分:3)

使用driver.findElement()执行隐式等待。因此,即使出现secondElement,测试也会等待一段时间。相反,在WebDriverWait中使用findElements()可能是更好的解决方案。

    WebDriverWait wait = new WebDriverWait(driver, 10);
    // Wait for one element to be available
    wait.until(new Predicate<WebDriver>() {
        @Override public boolean apply(WebDriver driver) {
            return driver.findElements(By.cssSelector("xpath1")).size() > 0
                    || driver.findElements(By.cssSelector("xpath2")).size() > 0;
        }
    });
    // Get the element
    WebElement e = null;
    if (driver.findElements(By.cssSelector("xpath1")).size() > 0)
        e = driver.findElements(By.cssSelector("xpath1")).get(0);
    else if (driver.findElements(By.cssSelector("xpath2")).size() > 0)
        e = driver.findElements(By.cssSelector("xpath1")).get(0);

    if (e != null)
        e.click();

答案 1 :(得分:2)

你可以尝试这样的东西,是的,它正在使用try和catch块,但这是一个程序,因为除了isDisplayed(),isEnabled()和isSelected()之外没有特殊的方法isPresent()和使用try和catch块处理异常有什么问题?

boolean isElement1Present = true;

try{       
      driver.findElement(By.xpath("xpathExpression1"));    
}catch (NoSuchElementException e){
    isElement1Present = false;
}

if(isElement1Present == false)
     driver.findElement(By.xpath("xpathExpression2"));

或者使用以下内容避免了try和catch块。

List<WebElement> elements = driver.findElements(By.xpath("xpathExpression1"));   

if (elements.size() == 0) {
    System.out.println("Element is not present"); 
} else {
    System.out.println("Element is present");
}

答案 2 :(得分:1)

这可能对您有所帮助

 WebElement element = null;

try{
    element = driver.findElement(By.xpath("//path1/...."));
}catch(NoSuchElementException ex){
    try{
        element = driver.findElement(By.xpath("//path2/...."));
    }catch(NoSuchElementException ex2){}
} 

if(element!=null) element.click();

答案 3 :(得分:1)

实际上没有明确的方法。您可以使用WATIR。如果您对Ruby没问题,它确实提供了这样的代码。否则,你只是试着捕捉。

答案 4 :(得分:0)

我认为你可以创建一个新方法。检查此链接:WebDriver: check if an element exists?此解决方案更快。

答案 5 :(得分:0)

我认为这里更好的方法是使用可以group selectors by using a comma

的CSS3选择器

为python道歉:

element = WebDriverWait(driver, 2).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "tr.entry , div.not-found"))
)

假设网页显示<div class="not-found">以防万一没有找到。或者使用<tr class="entry">

显示结果