Hello, I’m really new in automation testing. And now I have a problem for trying to get attribute from each elements with same class
In my web I had multiple elements looks like this
<div class="edition-item edition-stream-item pull-left" id="Edition-1450474128678064362" data-creation-time="19 Oct 2021 21:49">
Now I need to get attribute “data-creation-time” for each elements, how can I achieve this?
My really goal is to get all creation time and then sort it by newest and oldest
Thank you
Please show us full HTML source code of your target web page.
Thanks for the reply, unfortunately I can’t share full HTML code
but its web that contain list of article with element looks lik this
link as parent -> <div class="edition-item edition-stream-item pull-left" id="Edition-1450474128678064362" data-creation-time="19 Oct 2021 21:49">
I thought I could make a sample code that implements your goal, but you do not provide sufficient information. Without information provided, I can not help you.
we would need html code, not screenshot.
without html code provided, the answerers have to type a lot to create a working examle.
i hope questioners to provide codes as material.
Ah I’m really sorry, is this help?
Thanks in advance
<div class="newest-content-item"><a href="https://link1">
<div class="edition-item edition-stream-item pull-left" id="Edition-1450819215308103999" data-creation-time="20 Oct 2021 20:40">
<div class="content-thumbnail">
<img src="image.jpg" alt="default cover : iKeNFtJjMWOIjtIQZtEuPjBef">
</div>
<div class="content-wrapper">
<h3 class="body-title">iKeNFtJjMWOIjtIQZtEuPjBef</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link2">
<div class="edition-item edition-stream-item pull-left" id="Edition-1450474128678064362" data-creation-time="19 Oct 2021 21:49">
<div class="content-thumbnail">
<img src="image.jpg" alt="default cover : VhFYlgAzwOUQlWijrLIopxUHa">
</div>
<div class="content-wrapper">
<h3 class="body-title">VhFYlgAzwOUQlWijrLIopxUHa</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link3">
<div class="edition-item edition-stream-item pull-left" id="Edition-1398184156076183602" data-creation-time="28 May 2021 14:47">
<div class="content-thumbnail">
<img src="image.jpg" alt="default cover :No.66/V/2021">
</div>
<div class="content-wrapper">
<h3 class="body-title">No.66/V/2021</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link4">
<div class="edition-item edition-stream-item pull-left" id="Edition-1316291295718678690" data-creation-time="14 Oct 2020 15:14">
<div class="content-thumbnail">
<img src="image.png" alt="default cover :No.65/X/2020">
</div>
<div class="content-wrapper">
<h3 class="body-title">No.55/XI/2002</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link5">
<div class="edition-item edition-stream-item pull-left" id="Edition-1285406263097696487" data-creation-time="21 Jul 2020 09:48">
<div class="content-thumbnail">
<img src="/assets/img/default/edition-cover.png" alt="default cover : 123123" class="default-cover">
</div>
<div class="content-wrapper">
<h3 class="body-title">123123</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link6">
<div class="edition-item edition-stream-item pull-left" id="Edition-1235079789308551181" data-creation-time="04 Mar 2020 12:49">
<div class="content-thumbnail">
<img src="/assets/img/default/edition-cover.png" alt="default cover : Edition 2020" class="default-cover">
</div>
<div class="content-wrapper">
<h3 class="body-title">Edition 2020</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link7">
<div class="edition-item edition-stream-item pull-left" id="Edition-1227882916172795936" data-creation-time="13 Feb 2020 16:11">
<div class="content-thumbnail">
<img src="/assets/img/default/edition-cover.png" alt="default cover : 64/II/2020" class="default-cover">
</div>
<div class="content-wrapper">
<h3 class="body-title">No. 64/II/2020</h3>
<div class="content-views">
</div>
</div>
</div>
</a><a href="https://link7">
<div class="edition-item edition-stream-item pull-left" id="Edition-1166264598232305689" data-creation-time="27 Aug 2019 15:22">
<div class="content-thumbnail">
<img src="/assets/img/default/edition-cover.png" alt="default cover : Coba" class="default-cover">
</div>
<div class="content-wrapper">
<h3 class="body-title">Coba</h3>
<div class="content-views">
</div>
</div>
</div>
</a><div id="EditionPrivateStreamNewestPlaceHolder"></div><div class="clearfix btn-show-more">
<a id="EditionPrivateStreamNewestShowMoreButton" href="javascript://" onclick="dg.Ajax.showMore(this, 'F838882117326OBEAIN');" class="btn btn-default show-more-button" data-offset="8" data-limit="8">
Load More
</a>
</div></div>
How about something like:
import org.openqa.selenium.By as By
import org.openqa.selenium.WebElement as WebElement
import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory
WebDriver driver = DriverFactory.getWebDriver();
List<WebElement> timeElements = driver.getElements(By.xpath('//*[@class="edition-item edition-stream-item pull-left"]'))
List<String> sortedTimeFrames = new ArrayList<>();
for (cnt=0; cnt < timeElements.size(); cnt++) {
sortedTimeFrames.add(timeElements.getAttribute('data-creation-time'))
}
try {
Collections.sort(sortedTimeFrames )
} catch (Exception) {WebUI.comment("oops. Sort process went south!")}
for (cnt=0; cnt < sortedTimeFrames .size(); cnt++) {
WebUI.comment("Timestamp ${cnt} is ${sortedTimeFrames[cnt]}")
}
2 Likes
Hello, Thank you for the help, but it’s get me an error
groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.getAttribute() is applicable for argument types: (java.lang.String) values: [data-creation-time]
at Private Edition List.run(Private Edition List:59)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.RawTestScriptExecutor.runScript(RawTestScriptExecutor.java:34)
at com.kms.katalon.core.main.RawTestScriptExecutor.doExecute(RawTestScriptExecutor.java:29)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:400)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:392)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:273)
at com.kms.katalon.core.main.TestCaseMain.runTestCaseRawScript(TestCaseMain.java:179)
at com.kms.katalon.core.main.TestCaseMain$runTestCaseRawScript$0.call(Unknown Source)
at TempTestCase1634787122848.run(TempTestCase1634787122848.groovy:98)
wrong:
for (cnt=0; cnt < timeElements.size(); cnt++) {
sortedTimeFrames.add(timeElements.getAttribute('data-creation-time'))
right:
for (cnt=0; cnt < timeElements.size(); cnt++) {
sortedTimeFrames.add(timeElements.get(i).getAttribute('data-creation-time'))
Or, even better if you use List.forEach(Closure cls)
syntax:
timeElements.forEach { e ->
sortedTimeFrames.add(e.getAttribute('data-creation-time'))
}
This syntax is simpler and better because you do not have to mind the index variable i
.
1 Like
Thank you so much, this is working, I can get all attribute value