如何找到angularJs元素的xpath?例如,我发现由于angularJs中的重复项目,我页面中的所有链接都具有相同的xpath - >
.//*[@id='div_1_1_1_2']/div/div[1]/div[2]/div[2]/div/div[2]/div[1]/div/div[2]/a
但我有10个元素,它们是不同的文本,所以我尝试用`"
所以我尝试使用contains但它从未找到它
.//[@id='div_1_1_1_2']/div/div[1]/div[2]/div[2]/div/div[2]/div[1]/div/div[2]/a[contains(@aria-label='Creazione Prodotto')]"`
我使用selenium,junit4,firefox webDriver
这是我的代码
public class PB01_TTT {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
WebElement element;
@Before()
public void setUp() throws Exception {
FirefoxProfile fxProfile = new FirefoxProfile();
fxProfile.setPreference("browser.download.folderList", 2);
fxProfile.setPreference("browser.download.manager.showWhenStarting", false);
fxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);
fxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/pdf, application/x-pdf, application/octet-stream");
fxProfile.setPreference("pdfjs.disabled", true);
driver = new FirefoxDriver(fxProfile);
baseUrl = "https://w8aon2bpm.replynet.prv:9443";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testPBO1TTT() throws Exception {
driver.get(baseUrl + "/ProcessPortal/login.jsp");
// driver.get(baseUrl + "/ProcessPortal/dashboards/SYSRP/RESPONSIVE_WORK");
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("user");
driver.findElement(By.id("password")).clear();
driver.findElement(By.id("password")).sendKeys("password");
String columnToDisplay=driver.findElements(By.xpath(".//*[@id='div_1_1_1_2']/div/div[1]/div[2]/div[2]/div/div[2]/div[1]/div/div[2]/a[contains(@aria-label='Creazione Prodotto')]"));
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
element = (WebElement) driver.findElements(By.xpath(columnToDisplayXpath));
Assert.assertNotNull(element);
总是给我一个notFoundElement,有什么建议吗?
谢谢
答案 0 :(得分:0)
如果你有10个链接,那么即使路径相同,它们很可能在某种程度上不同,在这种情况下,你需要根据不同的东西构建路径。
例如:使用href,text或其他任何不同的部分
//a[contains(@href, 'part_of_href')]
//a[contains(text(), 'part_of_text')]
//a[@title='title']
//a[contains(@aria-label='Creazione Prodotto')]
如果您在获取选择器方面需要任何帮助,请添加链接的html部分,如果需要,您可以更改网址。
提示:避免使用不提示任何内容的绝对xpath和属性,它们可以更改为:
.//*[@id='div_1_1_1_2']/div/div[1]/div[2]/div[2]/div/div[2]/div[1]/div/div[2]/a[contains(@aria-label='Creazione Prodotto')]"
这将在未来为您提供大量工作。