Selenium XPath断言

时间:2018-12-04 13:05:01

标签: c# selenium selenium-webdriver webdriver

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

我需要验证特定属性:“ TNT” /“食物” /“其他东西”是否可见并正确显示(字符串可以)。 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 个答案:

答案 0 :(得分:1)

看起来很丑,但是

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

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

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

将定位列表中的下一个元素,您可以断言它的文本为'TNT'

重复此列表中的其他元素。如果您愿意,此定位器还可以定位数字

答案 1 :(得分:1)

我对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");               
        }           
    }