如何展开列表并选择动态值。

时间:2016-08-29 19:36:10

标签: javascript selenium selenium-webdriver

我试图找出解决方案如何从下面的代码中 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

2 个答案:

答案 0 :(得分:0)

您可以通过两类ul和一个span类来选择元素:

WebDriver.findElement(By.cssSelector("ul.ptv-list.ptx-expanded span.tree-text")).click()

这意味着选择具有span类的tree-text元素,该元素位于同时包含ulptv-list类的ptx-expanded元素中。

答案 1 :(得分:0)

(假设你正在使用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();