【问题标题】:How can i select items from the list如何从列表中选择项目
【发布时间】:2015-03-12 00:19:06
【问题描述】:

我无法获取列表中的项目。我得到的只是跨度中的一个项目。如何在选择中获取项目。如果我不在 css 选择器中使用 span,那么脚本会生成一个错误,即元素不可见。

这是页面的 HTML:

<table>
<tbody>
    <tr>
        <td>
            <div>
                <div class="select2-container select2-container-active" id="s2id_agency" style="width: 150px;">
                <a href="javascript:void(0)" onclick="return false;" class="select2-choice" tabindex="-1">   
                <span>01_me</span>
                <abbr class="select2-search-choice-close" style="display:none;"></abbr>   
                <div>
                <b></b>
                </div>
                </a>
                <input class="select2-focusser select2-offscreen" type="text"></div>
                <select name="agency" id="agency" style="width:150px;" class="select2-offscreen" tabindex="-1">
                <option value="14814">01_me</option>
                <option value="14333">A_RLAgency</option>
                <option value="14771">Agency_20150111183734</option>
                <option value="14254">RLAgency</option>
                <option value="14065">unknown_agency</option></select>
            </div>
        </td>
    </tr>   
</tbody>

这是我的脚本:

        try {
        WebDriverWait wait = new WebDriverWait(driver, 30);
        List<String> displayed = new ArrayList<String>();
        List<String> sorted = new ArrayList<String>();

        List<WebElement> verifyAgency = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By
                .cssSelector("#s2id_agency > a.select2-choice > span")));


        System.out.println("NUMBER OF ROWS IN THIS TABLE = "
                + verifyAgency.size());


        for (WebElement element : verifyAgency) {
            System.out.println("" + element.getText());
            displayed.add(element.getText());
            sorted.add(element.getText());
        }

        Collections.sort(sorted);
        log.info(sorted);
        if (!displayed.equals(sorted)) {

            final String failedMsg = "Agency is not in alphabatical ordr.";
            log.error(failedMsg, null);
            boolean passed = false;
            Assert.assertFalse(passed, failedMsg);
            System.out.println(failedMsg);
        }

    } catch (Exception e) {

        final String failedMsg = "Failed trying to check agency names in alphabetical order.";
        log.error(failedMsg, null);
        boolean passed = false;
        Assert.assertFalse(passed, failedMsg);
        System.out.println(failedMsg);
    }

【问题讨论】:

  • 您的要求是什么?只打印选项?
  • 是的,请确保它们按字母顺序排列。谢谢赛弗!

标签: selenium selenium-webdriver


【解决方案1】:

试试这个代码:

Select objSelect = new Select(dw2.findElement(By.id("agency")));
List<WebElement> lstOptions = objSelect.getOptions();
boolean sorted = false;
for (int i = 0; i < lstOptions.size() - 1; i++) {
    if (lstOptions.get(i).getText()
        .compareTo(lstOptions.get(i + 1).getText()) > 0) { // Checking sorting based on natural sort
    sorted = false;
    break;
    }
    sorted = true;
}
if (sorted)
    System.out.println("Sorted");
else
    System.out.println("Un-sorted");

【讨论】:

  • Vivek,您的代码对项目进行排序,但是它输出,[[[[[FirefoxWebDriver: firefox on MAC (f8d9d3fa-6e73-ce47-8a14-aa2193065313)] -> id: Agency]] - > 标签名称:选项]。我也在尝试从列表中输出项目。是否可以从我在页面上的 html 中获得?谢谢!
  • 我没有在我的代码中的任何地方对列表进行排序。我只是比较列表元素。您正在获得该操作,因为您正在打印 webelement 对象。打印选项 sysout lstOptions.get(i).getText().
  • 非常感谢,Vivek,它成功了!另外,非常感谢 Saifur。我没有以正确的方式输出是我的错。继续努力,伙计们!
【解决方案2】:

您可能正在尝试在不可见的选择列表选项上使用visibilityOfAllElementsLocatedBy。事实上,根据您的要求,您不需要它们可见。您也可以使用presenceOfElementLocated 并获取列表简单的SelectElement 类就足够了

注意:我的是 C#

    IWebElement element = driver.FindElement(By.XPath("//select[@id='agency']"));

    SelectElement selectList = new SelectElement(element);
    IList<IWebElement> options = selectList.Options;

而且,如果这是一个静态列表,您可以避免所有这些古怪的工作,而只需做

    IWebElement element = driver.FindElement(By.XPath("//*[@id='agency']"));    
    SelectElement selectList = new SelectElement(element);

    var isTrue = selectList.getText().equals("01_me / A_RLAgency / Agency_20150111183734 / RLAgency / unknown_agency")

here

【讨论】:

  • 列表不是静态的。当我使用 List options = selectList.getOptions();我得到这个输出,而不是列表中的项目 [[[[[FirefoxWebDriver: firefox on MAC (cd757b01-65de-6444-a748-e2f3ba74f7c3)] -> xpath: //*[@id='agency']]] -> 标签名称:选项]]。我做错了什么?
  • 尝试改用//select[@id='agency']
  • 可以上传截图吗?
  • 我认为我还没有这个特权来发布屏幕截图,但是你指的是哪个屏幕截图?谢谢!
  • 使用imgur 上传。我想查看 select 元素以及它是如何嵌入的。
猜你喜欢
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多