无法选择隐藏的下拉列表

时间:2017-06-15 05:34:43

标签: java selenium selenium-webdriver

我试图从Selenium Webdriver的下拉列表中选择一个值。但每次我最终在控制台中出现错误

这是我的网站URL,下面是元素的快照:

enter image description here

我已尝试使用以下代码,但它无效

Select dropdown= new Select(driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']")));
dropdown.selectByValue("4");

获得以下例外: -

  

线程中的异常" main"   org.openqa.selenium.support.ui.UnexpectedTagNameException:Element    应该是"选择"但是" span"构建信息:版本:   ' unknown',revision:' 1969d75',time:' 2016-10-18 09:43:45 -0700'

也尝试过这种方式:

driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']")).click();
Select dropdown= new Select(driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/select/")));
dropdown.selectByValue("4");

这次错误是:

  

线程中的异常" main"   org.openqa.selenium.InvalidSelectorException:无效的选择器:无法使用   使用xpath表达式定位元素   // div [@ on-dimension-select =' selectQuantityDimension'] / select /   由于以下错误:SyntaxError:无法执行   '评价' on' Document':字符串' // div [@ on-dimension-select =   ' selectQuantityDimension'] /选择/'不是有效的XPath表达式。

这是相同的HTML代码:

 <div class="ng-isolate-scope ng-pristine ng-valid" ng-show="!docked" ng-model="variantOptionsModel" on-dimension-select="selectQuantityDimension" docked="docked">
  <label>Quantity:</label>
    <select class="accessory-option ng-pristine ng-valid" ng-model="model.selectedQuantity" ng-options="quantity for quantity in model.quantityDropDownValues track by quantity" ng-change="quantityClick()" data-qa-quantity-value="" style="display: none;">
     <option value="1" selected="selected" label="1">1</option>
     <option value="2" label="2">2</option>
     <option value="3" label="3">3</option>
     <option value="4" label="4">4</option>
     <option value="5" label="5">5</option>
     <option value="6" label="6">6</option>
   </select>
<span id="" class="selectboxit-container selectboxit-container" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" aria-owns="">
<span id="" class="selectboxit accessory-option ng-pristine ng-valid selectboxit-enabled selectboxit-btn" name="" tabindex="0" unselectable="on" data-qa-quantity-value="">
<ul class="selectboxit-options selectboxit-list" tabindex="-1" role="listbox" aria-hidden="true" style="max-height: 217px; top: -217px; display: none;">
</span>
</div>

我不确定我做错了什么。

3 个答案:

答案 0 :(得分:1)

以下是您的问题的答案:

以下是导航到“Why isn't this code causing a ConcurrentModificationException?”的工作代码块,计算Quantity DropDown中的条目数,将输出打印到控制台,最后选择Quantity为<强> 4 &amp;打印到控制台:

package demo;

import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Q44559302_dropdown_select {

    public static void main(String[] args) {


        String innerhtml = null;
        System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe");
        WebDriver driver =  new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("https://www.o2.co.uk/shop/smartwatches/samsung/gear-s2/#contractType=nonconnected");
        driver.findElement(By.xpath("//form[@id='chooseTariffForm']//div[@class='quantiy-picker-wrapper']/div/span")).click();
        List<WebElement> element_list = driver.findElements(By.xpath("//form[@id='chooseTariffForm']//div[@class='quantiy-picker-wrapper']/div/span/ul/li/a"));
        System.out.println("Number of Elements : "+element_list.size());
        for (int i=0; i<element_list.size(); i++)
        {
            WebElement my_element = element_list.get(i);
            innerhtml = my_element.getText();

            if(innerhtml.contentEquals("4"))
            {
                my_element.click();
                break;
            }


        }
        System.out.println("Value selected from Dropdown is : "+innerhtml);

    }

}

如果这回答你的问题,请告诉我。

答案 1 :(得分:0)

您不能使用选择类,因为页面选择框没有选择标记。

要选择该选项,首先单击选择框,然后单击您想要的列表选项。

以下代码将点击第一个选项

        //click on dropdown
        driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']")).click();

        //click on first option 1
        driver.findElement(By.xpath("//div[@on-dimension-select = 'selectQuantityDimension']/*[@role='combobox']/ul/li[@data-val=1]/a")).click();

答案 2 :(得分:0)

下拉列表是Angular,您粘贴的DOM的Select Tag指向网页中的其他位置。

  1. 点击数量下拉列表:

    driver.findElement(by.xpath("//div[@class='quantiy-picker-wrapper']//span[@class='selectboxit-container selectboxit-container']")).click();
    
  2. 现在,用户可以看到下拉选项。

    1. 从下拉列表中选择一个值:

      //am selecting quantity 4
      driver.findElement(by.xpath("//div[@class='quantiy-picker-wrapper']//span[@class='selectboxit-container selectboxit-container']//li[4]")).click();
      
    2. 希望这会对你有所帮助。感谢。