我正在运行脚本来自动化测试用例并遇到这个独特的问题。 我已经检测到并使用了元素的ID用于点击等目的。然而,突然间这些ID发生了变化,脚本不再起作用了。 另一个奇怪的事情是,这些ID与在Chrome中检查时的脚本相同,但在Firefox驱动程序浏览器中有所不同。
测试驱动程序的Firebug: -
<p class="description" onclick="selectElementTextListForIE(this,'tile29', 'tile19');selectElementTextList(this,'tile29', '')" id="tile29_span_0_0">
Platinum
</p>
相同元素的Chrome检查器: -
<p class="description" onclick="selectElementTextListForIE(this,'tile20', 'tile19');selectElementTextList(this,'tile20', '')" id="tile20_span_0_0">
Platinum
</p>
此外,可能是检测运行时生成ID的元素的最佳策略。 我甚至尝试使用XPATH,但它也包含id的引用 例如。 @ id =“tile276_input
任何帮助将不胜感激。
感谢。
阿布舍克巴克
答案 0 :(得分:8)
您可以使用CSS。对于您的元素,看起来像:
<* id="tile276_input" />
您需要做的是找出有关它的变化。我猜它是中间的数字。如果是,则您的选择器看起来像:
By.cssSelector("*[id^='tile'][id$='input']")
这将查找ID为“以tile
开头”且“以input
结尾的任何内容。在我们的示例中,"tile276_input"
与之匹配。
如果您想了解更多信息,请参阅this article
答案 1 :(得分:1)
你也可以尝试starts-with()
和driver.findElement(By.xpath("//*[contains(@id,'title')]"))
来做这些事情
driver.findElement(By.xpath("//* [start-with(@id,'title')]"))
或
>>> dct = {'a':'vala', 'b':'valb'}
>>> ','.join('{}={!r}'.format(k, v) for k, v in dct.items())
"a='vala',b='valb'"
答案 2 :(得分:0)
WebElement element = driver.getElement(By.cssSelector("[id^='title']);
或者
WebElement element = driver.getElement(By.cssSelector("id:contains('title')"));
您可以使用此元素执行所需的操作。