Is it possible to merge a variable within single quotes in XPath?

Currently working with nodeJS and experimenting with the following code snippet:

for (let i = 1; i <= elSize; i++) {
  try {
    let DeviceName = await driver
      .findElement(By.xpath("//span[@class='a-size-medium a-color-base a-text-normal']['i']"))
      .getText();
    console.log(i + ". Device Name: " + DeviceName + "\n");
  } catch (e) {
    await driver.executeScript(
      ...
      catch statements...
    );
  }
}

Attempting to include the 'i' variable from the for loop in the xpath. Facing issues due to the absence of double quotes, resulting in an unrecognizable xpath like this one:

driver.findElement(By.xpath("(//span[@class='a-size-medium a-color-base a-text-normal')["+ i +"]")).getText();

This causes the xpath to be unrecognized.

Here is an example of how the xpath can be identified in the browser:

//span[@class='a-size-medium a-color-base a-text-normal']['i']

Answer №1

To customize the XPath expression using the index value i, you can utilize the String.format method as shown in the following snippet:

var selector = "(//span[@class='a-size-medium a-color-base a-text-normal'])[{0}]"
for (let i = 1; i <= totalElements; i++) {
  var updatedSelector = String.format(selector, i);
  try {
    let ElementText = await driver.findElement(By.xpath(updatedSelector)).getText();
    console.log(i + ". Element Text: " + ElementText + "\n");
  } catch (e) {
    await driver.executeScript(
      ...
      appropriate catch block...
    );
  }
}

Answer №2

To avoid inefficiency, consider building a single XPath expression that includes a variable reference for i. This can be executed multiple times with different values of the parameter. For example:

//span[@class='a-size-medium a-color-base a-text-normal'][$i]

Another approach is to fetch all items at once using an XPath expression like:

//span[@class='a-size-medium a-color-base a-text-normal']

You can then iterate over the retrieved items in your host language (such as Javascript).

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Issue with Jquery's .html() function not functioning properly when trying to select HTML

I am currently working on a piece of code that looks like this: $price = $(element) > $('.main_paket_price').attr('name'); alert($price); Basically, I am trying to select an element inside element which has the class main_paket_pri ...

Building a sub route in React Router v4 allows developers to efficiently organize and manage

Before starting, I familiarized myself with the concept of react router by visiting https://reacttraining.com/react-router/web/guides/quick-start. I have developed a simple 3-page site in react and now want to create a list that will allow me to display so ...

The password reset feature using bcrypt is malfunctioning, as headers cannot be modified once they have been sent to the client

After developing a reset password function, the code appears as follows: router.get('/reset/:id',function(req,res,next){ User.findOne({'resetToken': req.params.id.trim()}) .exec(function(error, user){ if (error) ...

Is there a way to enlarge images when hovered using canvas?

I came across a fascinating example at the following link: , where the images expand when hovered over. I am aware that this can be achieved using jquery, but I have concerns about its speed and reliability. I would like to experiment with d3.js, although ...

Achieving automatic restarts with grunt-express when files are updated

I am working on implementing grunt-express and grunt-watch in my project. My goal is to have the server automatically reload whenever I make changes to my server file. Below is the setup I currently have: Gruntfile.js var path = require('path' ...

Encountering unidentified data leading to the error message "Query data must be defined"

Currently, I'm utilizing Next.js to develop a project for my portfolio. In order to manage the API, I decided to implement both Tanstack query and Axios. The issue arises when attempting to retrieve the data as an error surfaces. Oddly enough, while ...

Is it possible to access the ID of a collection_select and have a list of items appear whenever the selection is modified?

I am working on a form named _form.html.erb <%= simple_form_for(@exam) do |f| %> <%= f.error_notification %> <div class="field"> <%= f.label :Year %> <%= f.collection_select :year_id, Year.order(:name), :id, :name, ...

The update of data has encountered a hurdle with Mongoose

Is there a way to update user data without having to fill out all the fields? For instance, if I only input the name, only the name should be updated while keeping other values the same. However, when I attempted this, my password validation displayed an e ...

In JavaScript, creating a new array of objects by comparing two arrays of nested objects and selecting only the ones with different values

I've been struggling to make this work correctly. I have two arrays containing nested objects, arr1 and arr2. let arr1 =[{ id: 1, rideS: [ { id: 12, station: { id: 23, street: "A ...

What is the Vercel equivalent to .netlify/functions?

I'm in the process of deploying this repository: https://github.com/DataStax-Examples/astra-tik-tok using Vercel instead of Netlify. I've converted vanilla React to Next.js, but I'm unsure how to transition the code in the Home.js file to w ...

Implementing $modal.open functionality in AngularJS controller using Ui-Bootstrap 0.10.0

Is there a way to properly call $modal.open from the controller in AngularJS since the removal of the dialog feature in ui-bootstrap 0.1.0? What is the alternative method available in the current version? In previous versions like 0.1.0, it was simply don ...

Are there any publicly accessible Content Delivery Networks that offer hosting for JSON2?

Everyone knows that popular tech giants like Google and Microsoft provide hosting for various javascript libraries on their CDNs (content distribution networks). However, one library missing from their collection is JSON2.js. Although I could upload JSON2 ...

What is the best way to combine two arrays and generate a new array that includes only unique values, similar to a Union

Here are two arrays that I have: X = [ { "id": "123a", "month": 5, "markCount": 75 }, { "id": "123b", "month": 6, "markCount": 85 ...

Executing an ajax post when a user clicks on a link or button

<tr> <td> <span id="id_1"> <a href="/Path" >Name</a> <a href="#">Delete</a> </span> </td> &l ...

Implement jQuery to close multiple div elements

My dilemma involves a series of divs with different manufacturer IDs listed as follows: manufacturer[1], manufacturer[2], manufacturer[3], ... etc ... In attempting to create a JavaScript for loop to hide each div, I discovered that it was not achievab ...

Strive to discover the ideal solution for capturing a screenshot of an OpenLayers map using html2canvas. Currently, the map elements are losing their CSS classes and images are not

Seeking advice on the best solution for working with html2canvas and css. I'm trying to take a screenshot of a map that includes various elements, but after capturing the image, all the css classes are lost and the images are not rendered properly. S ...

A more detailed explanation of Angular's dot notation

I came across a solution for polling data using AngularJS here on stackoverflow. In this particular solution (shown below), a javascript object is used to return the response (data.response). I tried replacing the data object with a simple javascript arra ...

Utilize the inherited background color for a linear-gradient effect

Here is the code snippet I am working with: <label className={classes.trigger} htmlFor={uniqueId} ref={labelRef} style={{ background: val, borderColor: val }} /> This is the corresponding CSS: .trigger { display: block; posit ...

Rapidly update code changes using the development mode in Next.js with the VS Code Remote Container/devcontainer

Struggling to enable Next.js' Fast Refresh feature while using a VS Code Remote Container. Running npm run dev displays the app on localhost, indicating the container functions properly - but Fast Refresh remains ineffective. Next.js version: v11.0.1 ...

Selenium Webdriver failing to select menuitem using text, xpath, or ID

Currently, I have some HTML code embedded in a SharePoint page that appears as follows: <span style="display:none"> <menu type='ServerMenu' id="zz28_RptControls" largeIconMode="true"> <ie:menuitem id="zz29_AddColumn" type="optio ...