Java 需要帮助-Selenium webdriver-单击可见列表中的元素无效

Java 需要帮助-Selenium webdriver-单击可见列表中的元素无效,java,selenium,xpath,selenium-webdriver,dropdownlistfor,Java,Selenium,Xpath,Selenium Webdriver,Dropdownlistfor,我正在从excel文件发送定义的数据。我尝试了一些代码,但他们没有在某个时间点从excel文件中选择所有数据。代码给了我WebElement not found的异常 以下是HTML代码: <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"> <div id="addDialog" class="hidden ui-dialog-content ui-widg

我正在从excel文件发送定义的数据。我尝试了一些代码,但他们没有在某个时间点从excel文件中选择所有数据。代码给了我WebElement not found的异常

以下是HTML代码:

<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
    <div id="addDialog" class="hidden ui-dialog-content ui-widget-content" style="display: block; width: auto; min-height: 30px; height: auto; max-height: 351.05px; overflow-y: auto;">
        <div class="field-container">
        <fieldset class="field-container">
            <legend>Contracts:</legend>
            <a class="select-all" href="#">Select All</a>
            <a class="deselect-all" href="#">Deselect All</a>
            <select id="addContract" class="searchable" multiple="multiple" style="position: absolute; left: -9999px;">
                <option value="93370956">93370956</option>
                <option value="93796167">93796167</option>
                <option value="94203239">94203239</option>
            </select>
            <div id="ms-addContract" class="ms-container">
                <div class="ms-selectable">
                    <input class="search-input" type="text" placeholder="filter" autocomplete="off"/>
                        <ul class="ms-list" tabindex="-1">
                            <li id="86355560-selectable" class="ms-elem-selectable">
                                <span>93370956</span>
                            </li>
                            <li id="202890296-selectable" class="ms-elem-selectable">
                                <span>93796167</span>
                            </li>
                            <li id="938848030-selectable" class="ms-elem-selectable">
                                <span>94203239</span>
                            </li>
                        </ul>
                </div>
            </div> 
需要从列表中选择值。 所做的努力: 代码的这一努力奏效了,但它只选择了一个值,然后给出了异常

WebDriverWait Wait=new WebDriverWait(driver, 10);
          Wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//ul[@class='ms-list']/li/span")));
          //now you can find element
          List<WebElement>options=driver.findElements(By.xpath("//ul[@class='ms-list']/li/span[contains(text(),'"+testData+"')]"));
          for (WebElement option: options) {
            if(testData.equals(option.getText())) option.click();
          }
尝试上面的代码,但它只选择一个值


请需要帮助来定位元素。我正在使用关键字驱动的框架从excel文件中读取值。

听起来好像您试图获取ul元素中包含的所有span元素,但如果我错了,请更正我。这是您正在使用的代码:

List<WebElement>options = driver.findElements(By.xpath("//ul[@class='ms-list']/li/span[contains(text(),'"+testData+"')]"));
在您的情况下,此XPath将只返回1个值。这是因为您试图将每个跨度的内容与输入值testData匹配。如果您希望将所有跨度元件置于ul内部,则使用:

List<WebElement>options = driver.findElements(By.xpath("//ul[@class='ms-list']/li/span"));
此XPath将选择列表中的所有span元素。如果只需要选择包含testData中文本的span元素,则可以在该列表上迭代选择适当的元素:

ArrayList<WebElement> optionsInTestData = new ArrayList<WebElement>();
for(WebElement element: options){
    for(String data: testData){
        if(element.getText() == data){
            optionsInTestData.add(element);
        }
    }
}

哪些元素失败了?目前很难理解代码失败的地方。@MadisKangro它没有从span类中选择值。当我运行上面的代码时,它们只是停留在这个xpath//ul[@class='ms-list']/li/span[containstext,'95757314']]@Tuks的select all buttton.add stacktrace=Remove additional]。谢谢你指出。但一个问题是,它只从值列表中选择了第一个值,它只是跳过了队列中的其他值。无法实例化类型列表&只能迭代java.lang.Iterable的数组或实例以获取列表和字符串数据的这些错误:testData。试图修改它。但它仍然不起作用。有testData的列表,所以它应该逐个选择它们。我有同样的情况,我使用了List options=driver.findElementsBy.xpath//ul[@id='ui-id-2']/li;对于WebElement选项:选项{iftestData.EqualOption.getText option.click;}。它正在为下拉列表工作。对不起,我已经有一段时间没有用Java编程了。我已将OptionIntestData更新为ArrayList,而不是List对象。这应该允许您初始化它。testData是什么对象类型?如果它是一个列表,您应该能够使用foreach循环。如果它仍然给你一个错误,你可以使用经典的forint i=0;iArrayList<WebElement> optionsInTestData = new ArrayList<WebElement>(); for(WebElement element: options){ for(String data: testData){ if(element.getText() == data){ optionsInTestData.add(element); } } }