如何在Selenium-java中选择在运行时生成div [i]的复选框?

时间:2018-10-08 08:55:33

标签: java selenium

在运行时将创建“ N”个复选框,具体取决于先前屏幕的选择。

对于xpath,它是“ 1”。

//*[@id="chargedashboard"]/div[1]/span[3]/label/span[3]

如果要选择1,9和15th复选框,如何编写代码以在运行时选择。

2 个答案:

答案 0 :(得分:0)

您可以编写一个函数click(IwebElement e){e.click();}获取webelement并对其执行点击操作。 调用时将元素的动态xpath发送给它 您可以使用硒化物或Katalon Recorder。 找出您喜欢的复选框的动态xpath(使用chropath扩展名或在DevTools元素窗口中,右键单击所需标签->复制->复制XPath)。

click(Driver.FindElement(". //*[@id="chargedashboard"]/div[1]/span[3]/label/span[3]"));
click(Driver.FindElement(". //*[@id="chargedashboard"]/div[9]/span[3]/label/span[3]"));
click(Driver.FindElement(". //*[@id="chargedashboard"]/div[15]/span[3]/label/span[3]"));

如果您将来使用它会很有帮助

IreadOnlyCollection<IWebElement> list;
list = Driver.findElements(By.XPath(". //*[@id="chargedashboard"]/div"))

使用forEach循环对其进行迭代。

答案 1 :(得分:0)

在Kantu中Selenium IDE forum是一个应该起作用的答案:https://forum.a9t9.com/t/applying-a-single-command-to-multiple-targets/670/2

您只需要确保您使用xpath而不是第1个元素获得第n个实例。这应该工作:

  • 第一个实例://*[contains(@id,“duedate_day”)][1]
  • 第二个实例://*[contains(@id,“duedate_day”)][2]
  • 第三实例://*[contains(@id,“duedate_day”)][3]

通常,//somexpression[N]的意思是“查找由// somexpression选择的每个节点,它是其父节点的第N个子节点。”

因此,在while循环中,您可以使用

//*[contains(@id,“duedate_day”)][${myIndex}]

,然后使用storeEval在每个循环中增加$ {myIndex}

{
  "Command": "storeEval",
  "Target": "${myIndex}+1 ",
  "Value": "myIndex"
},