处理动态Xpath
我正在使用Selenium实现自动化。需要您的帮助来处理动态Xpath,如下所示:处理动态Xpath,xpath,selenium,selenium-webdriver,Xpath,Selenium,Selenium Webdriver,我正在使用Selenium实现自动化。需要您的帮助来处理动态Xpath,如下所示: Driver.findElement(By.xpath(“/[@id='inq2985']]/div[2]/tr/td/div/div[3]/div”)。单击() 如上所述,在每次运行期间,INQ_2985将更改为2986,2987,2988等 HTML代码: < div> class="context-menu-item-inner" style="background-image:url(../i
Driver.findElement(By.xpath(“/[@id='inq2985']]/div[2]/tr/td/div/div[3]/div”)。单击()代码>
如上所述,在每次运行期间,INQ_2985将更改为2986
,2987
,2988
等
HTML代码:
< div> class="context-menu-item-inner" style="background-image:url(../images/productSmall.png);">Tender Assignment < /div>
你能帮我一下吗。你可以尝试在xpath中使用contains()
或starts-with()
上面的xpath可以重写如下:
findElement(By.xpath(“//*[以(@id,'INQ')]开头]/div[2]/tr/td/div/div[3]/div”)。单击()
如果您可以发布更多的html,我们可以帮助您改进xpath
- 此外,不建议使用如此长的xpath,这可能会导致测试更频繁地失败
例如,如果将“新表数据或div”添加到UI中,则上述xpath将不再有效
- 您应该尝试使用id、class或其他属性来接近您试图查找的元素
- 我个人建议使用
cssselector
而不是xpath
如果您的xpath发生变化
例如:“//*[@id='msg500']”、“//*[@id='msg501']”、“//*[@id='msg502']”
等等
然后在脚本中使用以下代码:
for (int i=0;i<=9;i++) {
String mpath= "//*[@id='msg50"+i+"']";
driver.findElement(By.xpath(mpath)).click();
}
for(inti=0;i最好的选择是使用完整的xpath,而不是您可以通过firebug轻松获得的id
e、 g
你可以用很多方法,
使用隐式等待
driver.findElement(By.xpath("//*[contains(@id,'select2-result-label-535')]").click();
driver.findElement(By.xpath("//*[contains(text(), 'select2-result-label-535')]").click();
好用正则表达式
driver.findElement(By.xpath("//*[contains(@id,'INQ_')]")
注意:如果您有一个ID,其名称从INQ_uu开始,则可以对元素执行操作。如果有一组ID,则可以提取为列表
,然后与元素的特定文本匹配(element.getText().trim()=“链接文本”
如果匹配,则采取行动。您可以按照其他逻辑进行遍历和匹配。您可以使用css-
div.context-menu-item-inner
使用此xpath:
driver.findElement(By.cssSelector("div.context-menu-item-inner").click();
div.context-menu-item-inner
driver.findElement(By.cssSelector("div.context-menu-item-inner").click();