您正在研究哪种语言?重复的 id 应该不是问题,因为您几乎可以使用 xpath 获取任何属性,而不仅仅是 id 标记。其他语言的语法会略有不同(如果您想要 Ruby 以外的其他语言,请告诉我),但您可以这样做:
driver.find_element(:xpath, "//input[@id='loginid']"
您构建 xpath 定位器的方式如下:从 html 代码中,您可以选择任何属性:
<input id="gbqfq" class="gbqfif" type="text" value="" autocomplete="off" name="q">
例如,假设您想使用name属性使用上面的 html 代码(Google 的搜索框)构建您的 xpath。您的 xpath 将是:
driver.find_element(:xpath, "//input[@name='q']"
换句话说,当 id 相同时,只需获取另一个可用属性!
改进:
为了避免脆弱的 xpath 定位器,例如 XML 文档中的顺序(可以轻松更改),您可以使用更健壮的东西。两个 xpath 定位器而不是一个。这在处理非常相似的 hmtl 标签时也很有用。您可以通过 2 个属性来定位一个元素,如下所示:
driver.find_element(:id, 'amount') and driver.find_element(xpath: "//input[@maxlength='50']")
或者如果您愿意,可以在纯 xpath 一个衬里:
//input[@id="amount" and @maxlength='50']
或者(如果您的 xpath 将只返回一个唯一元素),您可以在抽象级别再上一层;完全省略属性值:
//input[@id and @maxlength]