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
我尝试了不同的方法来解决这个问题:
我尝试使用 Jmeter 的 __time 函数解析和传递 sysdate(使用 sendKeys()),但似乎我正在与之交互的特定前端字段希望您从日期选择器中选择。
我还尝试使用 Xpath select 日期选择器日历中的特定单元格,但我需要的是始终选择selected 之前的日期打开日期选择器时出现。
所以我最终做的是使用 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
我一直在使用 Jmeter 的内置 WebDriver Sampler 和 Selenium 进行一些网页抓取。
上下文: 在某个时候,我只需要 select “打开”日期选择器时出现的预 selected 日期(该日期始终是实际日期)。这是一张展示它的样子的照片:
Date Picker
如您所见,预select编辑日期是 2022 年 4 月 4 日(今天的日期),并且该特定单元格的 CSS 定位器是 #_z_0-w1 > td.z-日历-cell.z-日历-weekday.z-日历-selected
我尝试了不同的方法来解决这个问题:
我尝试使用 Jmeter 的 __time 函数解析和传递 sysdate(使用 sendKeys()),但似乎我正在与之交互的特定前端字段希望您从日期选择器中选择。
我还尝试使用 Xpath select 日期选择器日历中的特定单元格,但我需要的是始终选择selected 之前的日期打开日期选择器时出现。
所以我最终做的是使用 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