问题描述
我正在尝试自动化使用React和Sass开发的系统。自动化工具是赛普拉斯。 我从事的工作很少有问题。因此,所有元素都使用动态类。
问题1:一旦有一个用于前端的新版本,所有类都将更改。
例如,AS:如果我编写以下命令
cy.get('。css-fdt4ua-Text-BettingAdd__Single')。click();
fdt4ua->将在新版本中进行更改。
此后,我的自动化脚本将失败,整个自动化脚本必须重写以包含新元素。是否可以使用xpath在页面HTML中唯一标识一个元素,如下所示?
由于当我为一个元素编写相对xpath时,相同的类一次又一次地重复,因此它与多个元素匹配。
尝试对以下课程进行点击事件。该类包含MID Div以及动态值。
<span class="css-fdt4ua-Text-BettingAdd__Single ewp79e31" xpath="1">MID Div </span>
这是我使用ChroPath编写的xpath,发现有16个元素与此xpath匹配。
// span [包含(@ class,'BettingAdd__Single')]
任何人都可以建议我一种更好的方法来标识唯一元素,而无需用ID重写HTML?
<li class="runner_35798501 ekk885d0 css-1ororew-ListItem-RaceSelectionsListItem e1vbyzvs0" xpath="1">
<div class="css-pn8xrj-RaceSelectionsListItem__Wrapper ekk885d2">
<div class="css-8cp37u">
<div class="css-ej6d3p-RaceSelectionsDetails e1j851ih0">
<div class="css-5jb77i-RaceSelectionsDetails__Silk e1j851ih1">
<div class="css-9pm5vz-RaceSelectionsDetails__SilkImage e1j851ih2"></div>
<div class="css-113z9a9-Text-RaceSelectionsDetails__LastStartsRow e1j851ih6">34</div>
</div>
<div class="css-x04caf-RaceSelectionsDetails__DetailsColumn e1j851ih5">
<div class="css-1eld9n9-Text-RaceSelectionsDetails__Name e1j851ih7">1. GIAAN'S GIRL
<span class="css-1nxtao7-Text e1j851ih8"> (1)
</span>
</div>
<div class="css-11nny5s-Text e1j851ih8">T: Wayne Gray</div>
</div>
</div>
</div>
<div size="1" class="win_35798501 ekk885d5 css-1e6g9j6-BettingAdd ewp79e33">
<span class="css-fdt4ua-Text-BettingAdd__Single ewp79e31">MID Div </span>
<span class="css-e36q88-Text-BettingAdd__Multi ewp79e32">
<i class="css-184tbjb-Icon e1ym0f420" title="add"></i></span>
</div>
<div size="1" class="place_35798501 ekk885d5 css-1e6g9j6-BettingAdd ewp79e33">
<span class="css-fdt4ua-Text-BettingAdd__Single ewp79e31">MID Div </span>
<span class="css-e36q88-Text-BettingAdd__Multi ewp79e32">
<i class="css-184tbjb-Icon e1ym0f420" title="add"></i></span></div><div class="css-10y5zla">
</div>
</div>
</li>
问题2:有一些
<span class="css-fdt4ua-Text-BettingAdd__Single ewp79e31" xpath="1">MID Div </span>
在执行自动化时,这些元素需要跳过。灰色元素和普通元素之间的唯一区别是丝绸类<div class="css-5jb77i-RaceSelectionsDetails__Silk e1j851ih1">
,它属于灰色元素,其CSS属性为opacity:0.2
是否可以检查Silk类的CSS属性并执行BettingAdd__Single类的click元素?
解决方法
您可以做的是获取要刮取数据的网站的静态版本,但它将禁用所有JS属性(如按钮和全部)。 要抓取数据,您可以转到www.scrapingdog.com,并获得一个基于页面的,基于redux的应用程序的静态页面,该容器类在每个会话中都会更改。 获取静态页面后,您可以将其保存在“ .html”文件中并运行自动化脚本。
,答案1:
您可以使用可以匹配类名不变的部分的方式编写CSS定位符,例如。 cy.get('[class*=Text-BettingAdd__Single]').click()
答案2: 由于类 div.silk 位于类 Text-BettingAdd__Single 中,因此您可以编写类似
的内容cy.get('[class*=Text-BettingAdd__Single]').parents().within(() => {
cy.get('[class*=RaceSelectionsDetails__Silk').click()
})
如果要在DOM树上进行单个级别,请使用parent()
;如果要在DOM树上进行多个级别,请使用parents()
查看赛普拉斯文档-https://docs.cypress.io/api/commands/parent.html#Syntax