我如何通过 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 选择一个类并以编程方式单击它