有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用SeleniumWebDriver选择网页上的两个元素之一?

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

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

//这样不行,还有别的办法吗?可以不抓不抓吗


共 (5) 个答案

  1. # 1 楼答案

    使用驱动程序。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();
    
  2. # 2 楼答案

    实际上没有明确的方法。你可以使用WATIR。如果你对Ruby没意见,它确实会提供这样的代码。否则,你就试着抓住

  3. # 3 楼答案

    我认为更好的方法是使用CSS3选择器,它可以group selectors by using a comma

    为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">显示结果

  4. # 4 楼答案

    您可以尝试这样的方法,是的,它使用的是try-and-catch块,但这是我们将遵循的过程,因为除了isDisplayed()、isEnabled()和isSelected()之外,没有特殊的方法isPresent(),使用try-and-catch块处理异常有什么错

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

    或者使用下面的方法避免“尝试并抓住”块

    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");
    }
    
  5. # 5 楼答案

    这可能对你有帮助

     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();