我如何通过 className 单击此元素,因为我将它用于具有相同类名的多个屏幕

Posted

技术标签:

【中文标题】我如何通过 className 单击此元素,因为我将它用于具有相同类名的多个屏幕【英文标题】:How do i click this element via className since i will be using it for multiple screens with same class name 【发布时间】:2020-11-10 08:55:52 【问题描述】:

我得到的元素是<div class="x-tool x-box-item" id="tool-123" src="data:image/gif;base64" class="new-img x-tool-maximize".

我特别需要这个class="new-img x-tool-maximize",因为它是所有屏幕的共同点。

我已经试过了

driver.findElement(By.className("new-img.x-tool-maximize")).click()

driver.findElement(By.className("new-img x-tool-maximize")).click();

driver.findElement(By.xpath("//div[contains(@class, 'value') and contains(@class, 'test')]"))``;

【问题讨论】:

为什么div包含两个类属性? class="x-tool x-box-item"class="new-img x-tool-maximize"? AFAIK By.className 只接受一个类名 【参考方案1】:

您应该能够使用 CSS 选择器来查找这种类型的元素。你会想要像driver.findElement(By.cssSelector("div.new-img.x-tool-maximize")) 这样的东西。

【讨论】:

【参考方案2】:
You can use list in selenium if you have multiple elements with same locators 

  

     List<WebElement> classes=driver.findElements(By.classname("new-img x-tool-maximize));
// if you want click 1 st class name element use this following line 
     classes.get(0).click();

OR  // if you want click 2 nd  class name element use this following line 
     classes.get(1).click();

【讨论】:

这行不通。 By.className 将抛出异常,因为参数包含多个类名,因为类名在 html 中由空格分隔。 你能分享这个网址吗?【参考方案3】:

使用列表获取所有具有特定类的 WebElements

 List<WebElement> list = driver.findElements(By.cssSelector("div.new-img.x-tool-maximize"));

【讨论】:

【参考方案4】:

当您打算仅使用className 属性值对元素进行click() 时,理想情况下,您需要为elementToBeClickable() 引入WebDriverWait,并且您可以使用以下Locator Strategies 之一:

cssSelector 仅使用 className 属性值:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector(".new-img.x-tool-maximize"))).click();

对于更规范的方法,您可以包含 tagName,如下所示:

cssSelector:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.new-img.x-tool-maximize]"))).click();

参考文献

您可以在以下位置找到一些相关的详细讨论:

Unable to locate element using className in Selenium and Java How to locate the last web element using classname attribute through Selenium and Python What are properties of find_element_by_class_name in selenium python?

【讨论】:

以上是关于我如何通过 className 单击此元素,因为我将它用于具有相同类名的多个屏幕的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 GetElementByClass 选择一个类并以编程方式单击它

通过使用纯Javascript单击页面上的任意位置来关闭元素

使用 classNames 模块动态设置类不起作用

通过多个类名查找 div 元素?

通过单击按钮显示消息,但我如何通过单击按钮隐藏此消息

我可以恢复 removeClass className.match 删除的以前的类吗?