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

Javascript 如何展开列表并选择动态值。,javascript,selenium,selenium-webdriver,Javascript,Selenium,Selenium Webdriver,我正试图从下面的代码中找出如何从Prod2中获得添加新的目标的解决方案 为了首先达到这个目标,我必须点击ptv图标ptv折叠图标。这可以使用XPATH实现,但每次运行脚本时,XPATH都会发生变化 是否可以使用任何方法来本地化直接添加新的 另一个问题是:addnew元素只有在我点击ptv图标ptv-collapse图标后才可见 <li class="ptv-listitem" data-id="1"> <div class="ptv-item"> <span cla

我正试图从下面的代码中找出如何从Prod2中获得添加新的目标的解决方案

为了首先达到这个目标,我必须点击ptv图标ptv折叠图标。这可以使用XPATH实现,但每次运行脚本时,XPATH都会发生变化

是否可以使用任何方法来本地化直接添加新的

另一个问题是:addnew元素只有在我点击ptv图标ptv-collapse图标后才可见

<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
  • 产品1
  • 产品2
    • **新增**

    您可以通过2类ul和1类span选择元件:

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

    这意味着选择一个
    span
    元素,该元素具有
    tree text
    类,它位于
    ul
    元素中,该元素同时具有
    ptv列表
    ptx扩展
    类。

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

    WebDriver.findElement(By.cssSelector("ul.ptv-list.ptx-expanded span.tree-text")).click()
    
    这意味着选择一个
    span
    元素,该元素具有
    tree text
    类,它位于
    ul
    元素中,该元素同时具有
    ptv列表
    ptx扩展的
    类。

    (假设您使用的是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();
    
    (假设您使用的是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();
    

    非常感谢。你的代码最适合我的问题。只是我不得不更换一些零件,谢谢你。你的代码最适合我的问题。只是我必须先更换一些零件