Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理动态Xpath_Xpath_Selenium_Selenium Webdriver - Fatal编程技术网

处理动态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

我正在使用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(../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();