定位具有下划线的id的元素

时间:2015-07-18 16:06:21

标签: java regex selenium xpath selenium-webdriver

首先,我是硒的新手,我正在尝试自动化。 我有一个'XPATH'动态变化的问题。只有xpath的第一部分和最后一部分是常量,但问题是第一部分和最后部分都有“下划线”,而我的表达式无法识别它。

我的Xpath:

ctl00_m_g_1140dfe4_4238_447b_b837_a62e12617b03_ctl00_rptLeftNav_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat

我尝试使用以下网络驱动程序代码:

dr.findElement(By.xpath("//input[@id[contains(., '_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat')]]")).click;

但是,我收到的错误信息如下所示。

  

org.openqa.selenium.NoSuchElementException:没有这样的元素

我读过某些地方'强调'不能用于正则表达式,是真的吗?有人可以在这提供解决方案吗?非常感激。

2 个答案:

答案 0 :(得分:2)

rptLeftNav属性中的这些数字看起来像是动态生成的。相反,找到检查rptLeftNavSubCatlnkNavSubCat//input[contains(@id, 'rptLeftNav') and contains(@id, 'rptLeftNavSubCat') and contains(@id, 'lnkNavSubCat')] 的元素:

WebDriverWait wait = new WebDriverWait(webDriver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[contains(@id, 'rptLeftNav') and contains(@id, 'rptLeftNavSubCat') and contains(@id, 'lnkNavSubCat')]")));

您也会混淆XPath和正则表达式。这里我们只讨论selenium webdriver并编写一个XPath表达式来定位元素。

您可能还需要等待元素出现

data

答案 1 :(得分:0)

我的朋友在网上搜索时找到了解决方案。这可以使用'cssselector'来解决。

dr.findElement(By.cssSelector("a[id^='ctl00'][id$='_ctl00_rptLeftNav_ctl00_lnkNavigation']")).click();

现在很放心:) !!