Jmeter 的 WebDriver 采样器 - CSS 定位器通配符

Jmeter´s WebDriver Sampler - CSS Locator Wildcard

我一直在使用 Jmeter 的内置 WebDriver Sampler 和 Selenium 进行一些网页抓取。

上下文: 在某个时候,我只需要 select “打开”日期选择器时出现的预 selected 日期(该日期始终是实际日期)。这是一张展示它的样子的照片:

Date Picker

如您所见,预select编辑日期是 2022 年 4 月 4 日(今天的日期),并且该特定单元格的 CSS 定位器是 #_z_0-w1 > td.z-日历-cell.z-日历-weekday.z-日历-selected

我尝试了不同的方法来解决这个问题:

  1. 我尝试使用 Jmeter 的 __time 函数解析和传递 sysdate(使用 sendKeys()),但似乎我正在与之交互的特定前端字段希望您从日期选择器中选择。

  2. 我还尝试使用 Xpath select 日期选择器日历中的特定单元格,但我需要的是始终选择selected 之前的日期打开日期选择器时出现。

  3. 所以我最终做的是使用 Selenium 的 CSS select 或如下所示定位预 selected 日期选择器的单元格:

//WDS.browser.findElement(pkg.By.cssSelector("#_z_0-w3 > td.z-calendar-cell.z-calendar-weekday.z-calendar-selected")).click();

问题: 这工作得很好,但我发现当月的周数发生变化时(例如,从 1 到 2),我的脚本最终失败了,因为 css select 或者我正在使用指定周数 (#_z_0-w1 > .....).

为了解决这个问题,我需要实现某种通配符,让我始终 select 具有特定 css 定位器的单元格,而不管月份的周数。我一直在做我的研究并尝试使用不同的代码行,但我无法让它工作(它总是最终说我有语法问题或者它找不到相应的 Web 元素)。

如果我能得到任何形式的帮助,我将不胜感激。另外,抱歉我生疏的英语,这不是我的母语。

我认为 CSS 选择器不支持属性名称中的通配符

最简单的选择是计算 current week number beforehand and use string concatenation 并将其插入到 CSS 表达式中,例如:

var currentWeek = Math.floor(new Date().getDate() / 7) + 1
WDS.browser.findElement(pkg.By.cssSelector("#_z_0-w" + currentWeek > td.z-calendar-cell.z-calendar-weekday.z-calendar-selected")).click()

有关 WebDriver 采样器的更多信息:The WebDriver Sampler: Your Top 10 Questions Answered