我有以下html: 它有一个类和一个自定义属性,我有几个具有相同className的标题。我想知道如何唯一地获取此元素并单击它。
<h4 class="font-white topic-heading progress-header no-margin width-80 d-table-cell" data-collapse-id="1">I. Introduction</h4>
这是我试过的: -
我试图获得class =&#34; font-white ...&#34;的属性。 with data-collapse-id =&#34; 1&#34; :
var element = driver.findElement(By.xpath("//*[@class='font-white topic-heading progress-header no-margin width-80 d-table-cell']")).getAttribute('data-collapse-id="1"');
console.log(element); // this prints a promise.
element.click(); //element.click is not a function exception
我也尝试过: -
var element = driver.findElement(By.xpath("//*[@data-collapse-id='1']"));
element.click(); // element.click is not a function exception.
我想知道如何在selenium中获取此元素并单击它。
这是整个div:
<div class="page-width d-table topic-heading-div">
<h4 class="font-white topic-heading progress-header no-margin width-80 d-table-cell" data-collapse-id="1">I. Introduction</h4>
<i class="fa fa-check font-white font-18 width-20 d-table-cell text-center vertical-center" aria-hidden="true"></i>
</div>
答案 0 :(得分:1)
你有没有尝试过:
driver.findElement(By.cssSelector("h4[data-collapse-id='1']")).click();
通过此属性查找元素应该有效,因为这是唯一的。此外,它有时无法单击xpath找到的元素。我认为这应该有用
答案 1 :(得分:0)
您的element
变量似乎打算返回attribute。但是,getAttribute()
方法应该接收属性名称值作为参数并返回一个属性值,这是一个简单的字符串......在这里你几乎没有问题:
'data-collapse-id="1"'
而不是'data-collapse-id'
简单回答您的问题 - 您无法点击自定义属性
答案 2 :(得分:0)
Class用于定义一组具有相似特征的元素。在这种情况下,topic-heading
类用于将<h4>
标记与称为data-collapse-id
的唯一ID属性一起分组。但在这种情况下,我们无法使用ID来识别/指定每个Web元素,因为同一类的元素可以是数百/数千。
您可以尝试使用以下方式唯一地找到任何标头元素:
var exactHeadingText = "I. Introduction"; // Exact heading By locExactTopicHeading = By.xpath("//h4[contains(@class,'topic-heading') and text()='"+ exactHeadingText + "']"); var partialHeadingText = "Introduction"; // Partial heading By locPartialTopicHeading = By.xpath("//h4[contains(@class,'topic-heading') and contains(text(),'"+ partialHeadingText + "')]");
理想情况下,您应该将exactHeadingText/partialHeadingText
作为函数参数/参数传递,以便可以重用代码来获取任何主题标题。
然后,您可以使用findElement()
并对其执行任何操作。