selenium webdriver:检测带有标签名称的图标

时间:2020-07-29 05:33:43

标签: selenium selenium-webdriver

我有一个问题:如何通过标签名称检测/查找图标?我有一个侧面弹出菜单,只有图标可见。当我将鼠标悬停在图标上时,如何获得特定的菜单项?

List<WebElement> elementlist = driver.findElements(By.xpath(("//li[@class='MuiButtonBase-root MuiListItem-root MuiMenuItem-root MuiMenuItem-gutters MuiListItem-gutters MuiListItem-button']/*[name()='svg']"))); elementlist.get(4).click();

该代码是硬编码的。我不想要那个。因为菜单项的数量可能会有所不同。我想按图标/标签名称获取

enter image description here enter image description here

    WebDriver driver = new ChromeDriver();
    System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--start-maximized");
    options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
    options.setExperimentalOption("useAutomationExtension", false);
    driver.get("http://testingapp.workspez.com/login");
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='field_email']"))).sendKeys("rahul@workspez.com");
    driver.findElement(By.xpath("//input[@id='field_password']")).sendKeys("Sujeet@19");
    driver.findElement(By.xpath("//span[@class='MuiButton-label' and contains(., 'Log In')]")).click();
    driver.manage().window().maximize();
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='MuiButton-label' and contains(., 'Operations')]"))).click();
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='MuiButton-label' and contains(., 'View')]"))).click();
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//li[text()=('Transaction(s)')]"))).click();  
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//td[@class='MuiTableCell-root MuiTableCell-body']//button[@class='MuiButtonBase-root MuiIconButton-root']/span[@class='MuiIconButton-label']"))).click();
    

1 个答案:

答案 0 :(得分:1)

据我了解,您希望基于某些属性动态单击元素,而不是单击返回列表中的第4个webElement。

您已经获得了元素列表:

  1. 您可以遍历它
  2. 匹配每个项目的唯一属性
  3. 找到匹配项后,请单击。

由于我看不到每个具有唯一值的元素的标题。您可以导航到如下所示的元素:

List<WebElement> elementlist = driver.findElements(By.xpath(("//li[@class='MuiButtonBase-root MuiListItem-root MuiMenuItem-root MuiMenuItem-gutters MuiListItem-gutters MuiListItem-button']/*[name()='svg']")));

如果您想单击电子邮件

for (int i =0; i<elementlist.size(); i++){
    if (elementlist.get(i).getAttribute("title") == "Email"){
        elementlist.get(i).click();
    }
}