代码之家  ›  专栏  ›  技术社区  ›  Ixi11

Selenium xpath断言

  •  0
  • Ixi11  · 技术社区  · 6 年前

    我有特定的表格视图,比如:
    enter image description here

    我需要验证特定属性:“TNT”、“Food”、“Another stuff”是否可见并正确显示(字符串很好)。DOM看起来很糟糕:

        <div class="w-50" style="" xpath="1">
       <div style="">
          <!-- react-text: 231670 -->Categories<!-- /react-text --><!-- react-text: 231671 -->:<!-- /react-text -->
       </div>
       <div style="padding-left: 10px; display: flex;">
          <div style="">Juomat</div>
          <div style="margin-left: auto; margin-right: 100px;">126</div>
       </div>
       <div style="padding-left: 10px; display: flex;">
          <div>TNT</div>
          <div style="margin-left: auto; margin-right: 100px;">2</div>
       </div>
       <div style="padding-left: 10px; display: flex;">
          <div>Food</div>
          <div style="margin-left: auto; margin-right: 100px;">12</div>
       </div>
       <div style="padding-left: 10px; display: flex;">
          <div>Another Stuffs</div>
          <div style="margin-left: auto; margin-right: 100px;">2</div>
       </div>
    </div>
    

    我试图找到这个://div[@class='w-50'][2](我们有两个与w-50相同的类),添加单词“contains”并以某种方式命名这些元素,但是为了从中获取文本,我需要将其分开。

    您能告诉我xpath定位符吗?在这种情况下,我如何做断言?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Arild Andreassen    6 年前

    看起来很难看,但是

    (.//*[@class='w-50']/div/div)[1]
    

    应该以列表中的第一个元素为目标,并且可以断言它具有文本“Juomat”

    (.//*[@class='w-50']/div/div)[3]
    

    将以列表中的下一个元素为目标,您可以断言它具有文本“TNT”

    对列表中的其他元素重复此操作。如果你想的话,这个定位器也可以锁定这个号码

        2
  •  1
  •   Sabari Cibi    6 年前

    我对C#不太熟悉,也不知怎么理解你的问题。

    问题:检查网页中的字符串(产品)列表是否可用/可见。如果我错了就纠正我。

    下面是Java代码,如果逻辑正确,则将其转换为C#。

        List<String> list = new ArrayList<String>();
        list.add("Juomat");
        list.add("TNT");
        list.add("Food");
        list.add("Another Stuffs");
        // list.add -  add whatever products you needed later (dynamically if needed) 
        list.add("XXX"); 
    
        String xp = "//div[@class = 'w-50']";
    
        for(String item: list) {
    
            try {
                    WebElement element = driver.findElement(By.xpath(xp + "/div/div[1][.='"+ item +"']"));
                    if(item.equals(element.getText()))
                    System.out.println(item +" is Visible");
                    }
    
            catch(Exception e) {
                    System.out.println(item + " is not Visible");               
            }           
        }