Selenium 每次运行代码时,页面中所有复选框的属性都在更改,如何查找复选框的元素

Selenium 每次运行代码时,页面中所有复选框的属性都在更改,如何查找复选框的元素,selenium,selenium-webdriver,Selenium,Selenium Webdriver,请参阅此壁炉: .//*[@id='gwt-uid-20138'] HTML: <input id="gwt-uid-20138" type="checkbox" value="on" tabindex="0"> 注意:此id值已更改。要查找复选框元素,必须借助id属性。但是正如您所看到的,id属性是动态的,因此我们必须使我们的定位器策略动态的。现在,如果您仔细观察id属性,您将观察到gwt uid-部分是常量,只有剩余部分,即20138是动态。因此,我们可以对动态

请参阅此壁炉:

.//*[@id='gwt-uid-20138']
HTML:

<input id="gwt-uid-20138" type="checkbox" value="on" tabindex="0">


注意:此id值已更改。

要查找
复选框
元素,必须借助
id
属性。但是正如您所看到的,
id
属性是动态的,因此我们必须使我们的
定位器策略
动态的。现在,如果您仔细观察
id
属性,您将观察到gwt uid-部分是
常量
,只有剩余部分,即20138
动态
。因此,我们可以对
动态
使用start-with()方法,并且为了唯一地标识复选框,在构造定位器时,我们还将包含type属性。因此,要查找
复选框
元素,可以使用以下代码行:

  • 爪哇:

    WebElement element = driver.findElement(By.xpath("//input[starts-with(@id,'gwt-uid-') and @type='checkbox']"));
    

如果id正在更改,是否可以尝试使用此复选框旁边的标签查找复选框? 试着这样做:

/label[text()="test"]/preceding-sibling::input

如果复选框的选择器不断更改,则需要使用始终不变且唯一的属性来标识它

从您的示例中可以看到
gwtuid-
part始终是常量,您可以使用它来标识元素

driver.findElement(By.xpath("//input[starts-with(@id, 'gwt-uid-')]"));

您正在使用哪个Selenium客户端?Java/Python/C#?请提供更多HTML代码,如下tomasz.myszka回答,您必须使用复选框前/后的文本来帮助查找复选框。我不认为你不能使用id startswith'gwt-uid'来查找复选框,我猜id startswith'gwt-uid'可能会看到一些元素:这样的期望是,用户提问时不仅会研究回答他们自己的问题,还会分享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另见: