首先,我是硒的新手,我正在尝试自动化。 我有一个'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:没有这样的元素
我读过某些地方'强调'不能用于正则表达式,是真的吗?有人可以在这提供解决方案吗?非常感激。
答案 0 :(得分:2)
rptLeftNav
属性中的这些数字看起来像是动态生成的。相反,找到检查rptLeftNavSubCat
,lnkNavSubCat
和//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();
现在很放心:) !!