“的xpath中出现问题”;ul";SeleniumWebDriver中的html代码

“的xpath中出现问题”;ul";SeleniumWebDriver中的html代码,selenium,xpath,selenium-webdriver,ui-automation,Selenium,Xpath,Selenium Webdriver,Ui Automation,HTML代码: <div id="routingPanel" class=""> <div id="routingPanelRight"> <ul id="routingList" class="ui-sortable"> <li class="ui-menu-item ui-draggable" style="display: list-item;" role="presentation" data-type="srl" data-id="15">

HTML代码:

<div id="routingPanel" class="">
<div id="routingPanelRight">
<ul id="routingList" class="ui-sortable">
<li class="ui-menu-item ui-draggable" style="display: list-item;" role="presentation" data-type="srl" data-id="15">
<a class="ui-corner-all" tabindex="-1">AS-HTTS-US-LAN-SW</a>
<span class="fa fa-trash"/>
<span class="type">[srl]</span>
</li>
<li class="ui-menu-item ui-draggable" style="display: list-item;" role="presentation" data-type="queue" data-id="119">
<a class="ui-corner-all" tabindex="-1">AS-EMEA-NORTH</a>
<span class="fa fa-trash"/>
<span class="type">[queue]</span>
</li></ul></div></div>
其中li值每次从excel文件更改

WebDriverWait wait = new WebDriverWait(driver, 15);
        wait.until(ExpectedConditions.visibilityOfElementLocated((By.xpath("//ul[@id='routingList']/li/span[1]")))).click();

        List<WebElement> options = driver.findElements(By.xpath("//ul[@id='routingList']/li/span[1]"));
        for (WebElement option : options) {
              if(testData.equals(option.getText()))
                option.click();
WebDriverWait wait=newwebdriverwait(驱动程序,15);
等待.until(ExpectedConditions.visibilityOfElementLocated((By.xpath(//ul[@id='routingList']]/li/span[1]))。单击();
List options=driver.findElements(By.xpath(“//ul[@id='routingList']]/li/span[1]”);
用于(WebElement选项:选项){
if(testData.equals(option.getText()))
选项。单击();
尝试了上面的代码,但它只从列表中删除了一个,我在列表中又传递了两个需要删除的testdata


需要建议请根据您在评论中给我的信息,我认为问题在于您试图从不包含文本的元素中获取文本

假设您的testData是
AS-HTTS-US-LAN-SW
。在您提供的HTML和您提到的xpath中,您正在选择一个自动关闭标记
。一旦选择了该标记,您将尝试获取其中的文本,但是没有文本

<ul id="routingList" class="ui-sortable">
    <li class="ui-menu-item ui-draggable" style="display: list-item;" role="presentation" data-type="srl" data-id="15">
        ===========================
        <a class="ui-corner-all" tabindex="-1">AS-HTTS-US-LAN-SW</a>  ----> The text is contained here
        <span class="fa fa-trash"/> ---> No text in that tag
        ===========================
        <span class="type">[srl]</span>
    </li>
</ul>

告诉我这是否有帮助

我知道您已经接受了答案,但有一种更有效的方法可以做到这一点。您可以指定要查找的文本作为XPath的一部分。因此,您只需执行一次搜索,而不是循环遍历所有选项,如果有许多选项,这些选项可能会影响性能。此外,使用类似的方法,您可以kely希望不止一次地使用它,所以将它放在函数中

在本例中,函数将接收您正在查找的字符串,然后单击相应的元素

public void selectRegion(String regionName)
{
    driver.findElement(By.xpath("//a[.='" + regionName + "']/following-sibling::span[@class='fa fa-trash']")).click();
}
你会这样称呼它吗

selectRegion(testData);

函数查找包含所需文本的
A
标记,然后单击同级
SPAN
with class
fa-fa-trash

是否引发异常或它不工作?没有异常,它不工作于excel文件中定义的相同关键字的其他测试数据,我使用的是关键字驱动框架。该语句中的testData是什么?
如果(testData.equals(option.getText())
它是一个名称。UK它有删除所选选项的按钮。例如,从下拉列表中,我选择了一些选项,如UK、US、India。在UI的一角,它们将被列出(所选选项)还有一个单独选项的删除按钮。所以我需要点击那个删除按钮,它是垃圾图标。我从excelfileOK发送这些名字,很抱歉问这么多问题,但我想我知道发生了什么。那么,你的测试数据是这样的吗?
AS-EMEA-NORTH
?还是它是你的一部分是吗?还是一点也没有?谢谢你它工作得很好:)。我想我需要更多地研究这种HTML来获得曝光。我只是将option.findElements改为option.findElement,因为它给了我类演员例外。啊,是的,对不起…这里有点输入错误。我也会更新答案。你完全正确。我没有跳出框框思考并发布我的回答没有经过深思熟虑。有趣的是,我几乎从不使用Web元素列表,总是试图从单个定位器中获得我想要的。你的答案比我的答案更正确mine@NicolasG.Duvivier有时候,很难不去了解OP是如何编码的,而只是提供一个快速的解决方案这是完全不同的。有时我会花时间重写整件事并解释,有时我只是当时没有。这可能是我将从经验中学到的东西:D。我会尽我最大的努力尽快做到这一点
public void selectRegion(String regionName)
{
    driver.findElement(By.xpath("//a[.='" + regionName + "']/following-sibling::span[@class='fa fa-trash']")).click();
}
selectRegion(testData);