问题描述
第一件事,是硒的新手,正在尝试自动化。 我有一个'XPATH'动态变化的问题。 xpath的第一部分和最后一部分是恒定的,但是问题是,第一部分和最后一部分都带有“下划线”,而我的表达式无法识别它。
我的Xpath:
ctl00_m_g_1140dfe4_4238_447b_b837_a62e12617b03_ctl00_rptLeftNav_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat
我尝试使用下面的webdriver代码:
dr.findElement(By.xpath("//input[@id[contains(., '_ctl00_rptLeftNavSubCat_ctl00_lnkNavSubCat')]]")).click;
但是,我收到如下错误消息。
org.openqa.selenium.NoSuchElementException:没有这样的元素
我在某处读到“下划线”不能在正则表达式中使用,这是真的吗? 有人可以在这里提供解决方案吗? 将不胜感激。
1楼
id
属性中的这些数字看起来像是动态生成的。
而是找到检查rptLeftNav
, rptLeftNavSubCat
和lnkNavSubCat
:
//input[contains(@id, 'rptLeftNav') and contains(@id, 'rptLeftNavSubCat') and contains(@id, 'lnkNavSubCat')]
您还将混淆XPath和正则表达式。 在这里,我们仅讨论Selenium WebDriver,并编写一个XPath表达式来定位元素。
您可能还需要等待元素出现 :
WebDriverWait wait = new WebDriverWait(webDriver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[contains(@id, 'rptLeftNav') and contains(@id, 'rptLeftNavSubCat') and contains(@id, 'lnkNavSubCat')]")));
2楼
我的朋友在在线搜索时已经找到了解决方案。 可以使用“ cssselector”解决。
dr.findElement(By.cssSelector("a[id^='ctl00'][id$='_ctl00_rptLeftNav_ctl00_lnkNavigation']")).click();
现在很放心:)!