找到重复angularJs项的xpath

时间:2016-09-20 17:33:27

标签: selenium firefox junit

如何找到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,有什么建议吗?

谢谢

1 个答案:

答案 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')]"   这将在未来为您提供大量工作。