我有这段HTML代码
我需要使用JavaScript找到这两个对象,所以我可以单击()它并编写一些文本(Test Automation)。
问题是 id 是动态生成的,因此无法使用,因为它会在每次加载页面时不断变化。现在因为不能使用id,所以这2个对象看起来相同而没有任何唯一标识符。
如果我使用这个
document.querySelector("input.value-restored[type='text']");

然后它会找到第一个。
任何想法我怎么能击中这两个物体?
谢谢。
答案 0 :(得分:2)
试试这种方式。
完成xpath后使用索引。在xpath [2]
下方的内部表示第二个input
webelement。如果有多个输入标签可用,那么您应该使用索引。
//input[@class='ui-calendar-display widget has-change-tracker value-restored'][2]
如果你想找到第一个webelement,那么请在xpath下面使用。
//input[@class='ui-calendar-display widget has-change-tracker value-restored'][1]
答案 1 :(得分:2)
您可以使用[contains()]
为这些元素构建xpath。我可以看到父span
有一个稳定的类名,你可以使用它。
WebElement firstElement = driver.findelements(By.xpath("//span[contains(@class,'form-row-ui-calender-row')]/input[@type='text']")).get(0);
WebElement secondElement = driver.findelements(By.xpath("//span[contains(@class,'form-row-ui-calender-row')]/input[@type='text']")).get(1);
或者使用索引编写索引。
WebElement firstElement = driver.findelements(By.xpath("//span[contains(@class,'form-row-ui-calender-row')]/input[@type='text'][1]"));
WebElement secondElement = driver.findelements(By.xpath("//span[contains(@class,'form-row-ui-calender-row')]/input[@type='text'][2]"));
希望这有帮助。
答案 2 :(得分:1)
在TestComplete中,您可以通过以下方式(在脚本中)执行此操作:
let obj = page.FindChildByXPath('//span[text()="Date to:"]/following-sibling::span/input[contains(@class, "ui-calendar-display")]', false);
obj.Click();
如果使用名称映射,则可以使用“必需子项”功能可靠地映射此对象,并直接通过映射树中的名称访问该对象。如果您需要有关如何创建此类映射的更多详细信息,请与我们联系。