0

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

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

// 这个不行,有没有别的办法?没有try and catch就可以了吗?

4

5 回答 5

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();
于 2013-03-19T07:42:33.237 回答
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");
}
于 2013-03-19T07:11:14.427 回答
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();
于 2013-03-19T07:06:50.543 回答
1

实际上没有明确的方法。您可以使用WATIR. 如果您对Ruby. 否则,您只需尝试并抓住。

于 2013-04-30T01:16:06.607 回答
0

我认为这里更好的方法是使用 CSS3 选择器,它可以使用逗号对选择器进行分组

为蟒蛇道歉:

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">

于 2014-10-23T20:48:17.497 回答