我正在尝试找出解决方案,该解决方案是如何从下面的代码中从Prod2获取“添加新”的目标。

首先要获得此目标,我必须单击ptv-icon ptv-collapse-icon。使用XPATH可以做到这一点,但是每次我运行脚本xpath时都会改变。

是否可以使用任何方法直接本地化“添加新”。

另一个问题是:只有在单击ptv-icon ptv-collapse-icon之后,“添加新元素”才可见。

<li class="ptv-listitem" data-id="1">
<div class="ptv-item">
<span class="ptv-icon ptv-expand-icon"></span>
<span class="ptv-text">
<span class="tree-text">Prod1</span>
<span class="tree-counts"></span>
</span>
</div>
</li>
<li class="ptv-listitem" data-id="2">
<div class="ptv-item">
<span class="ptv-icon ptv-collapse-icon"></span>
<span class="ptv-text ptv-selected">
<span class="tree-text">Prod2</span>
<span class="tree-counts"></span>
</span>
</div>
<ul class="ptv-list ptx-expanded">
<li class="ptv-listitem" data-id="-1">
<div class="ptv-item">
<span class="ptv-text">
<span class="tree-text">**Add New**</span>
<span class="tree-counts"></span>
</span>
</div>
</li>
</ul>
</li

最佳答案

(假设您使用的是Java)您应该尝试将xpath与永远不会更改的文本一起使用,如下所示:

//to click on prod2
driver.findElement(By.xpath(".//li[contains(.,'Prod2')]//span[@class = 'ptv-icon ptv-expand-icon']").click();

//to click on add new
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath(".//li[contains(.,'Add New')]"))).click();

10-07 22:19