识别div类中绕过span类的文本

时间:2019-05-16 11:22:00

标签: c# html visual-studio selenium

我在Visual Studio中使用Selenium。在要打开下拉菜单的地方编写测试用例。我想使用唯一的名称来标识菜单。

代码如下:

<apply executable="java" parallel="false" dest="${originaljs.dir}">
    <fileset dir="${originaljs.dir}" includes="EfsStructure.js" />
      <arg line="-jar"/>
      <arg path="../yuicompressor-2.4.7.jar" />
      <arg line="-v"/>
      <arg line="-o"/>
        <srcfile/>
      <mapper type="glob" from="EfsStructure.js" to="${tempjs.dir}/temp/*-min.js"/>
</apply>

我对此的正常解决方法是:

<div class="mat-select-value">
   <span class="mat-select-placeholder ng-tns-c34-170 ng-star-inserted">
   UniqueTextID
   </span>
</div> 

问题在于,跨度类:“插入了mat-select-placeholder ng-tns-c34-170 ng-star”并不总是相同。每次再次加载页面时,数字“ c34-170”将更改为一组新的数字。

我的问题是:是否可以通过仅指定div类来识别“ UniqueTextID”:跳过跨度类的“ mat-select-value”?

类似这样的东西:

"//span[contains(@class,'mat-select-placeholder ng-tns-c34-170 ng-star-inserted')][contains(text(),'UniqueTextID')]"

或者,如果我必须指定span类,是否可以仅添加span类的开始,即每次都不会更改的部分:“ mat-select-placeholder”?

1 个答案:

答案 0 :(得分:1)

您需要提供span标签。如果您不想使用class属性,则只能使用文本值。

//div[contains(@class,'mat-select-value')]/span[contains(text(),'UniqueTextID')]

OR

//div[contains(@class,'mat-select-value')]/span[contains(.,'UniqueTextID')]

或者,如果您要同时使用带有class属性的span标签和starts-with

"//div[contains(@class,'mat-select-value')]/span[starts-with(@class,'mat-select-placeholder ng-tns-')][contains(text(),'UniqueTextID')]"